我在CS面试的时候碰到了这个问题。我对此一无所知,更不用说实现代码了……
我能得到一些提示吗?
p.s.exp()是函数y=e^x,ln()是y=ln(x)

最佳答案

通过二进制搜索答案,可以在日志时间中找到值。这是可能的,因为log x是单调递增函数。
(由WolframAlpha提供)。
例如,如果我们必须计算其对数(假设它是x)大于1的值,则从假设答案=x开始。提高e^answer的幂,并检查该值是否大于或小于x。现在,基于您得到的值是否大于或小于x,您可以细化您的限制。当你到达你的答案的适当范围内时,搜索就会停止。

double log(double X){
        double lo = 1;
        double hi = X;

        while(true){
            double mid = (lo+hi)/2;
            double val = power(e, mid);
            if(val > X){
                hi = mid;
            }
            if(val < X){
                lo = mid;
            }
            if(abs(val-X) < error){
                return mid;
            }
        }
    }

类似地,如果x的值小于1,那么可以将此情况减少到我们已经考虑过的情况,即当x大于1时。例如,如果x=0.04,则
log 0.04=对数(4/100)
=(日志4)-(日志100)

07-28 03:08
查看更多