我在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)