我在参加 CS 求职面试时遇到了这个问题。我对此一无所知,更不用说实现代码了……
我能得到一些提示吗?
附言exp() 是函数 y = e^x 而 ln() 是 y = ln(x)
最佳答案
您可以通过二进制搜索答案找到日志时间的值。这是可能的,因为 log X 是单调递增函数。
(由 WolframAlpha 提供)。
例如,如果我们要计算其对数的值(假设为X)大于1,则从假设answer = 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 = log (4/100) =(日志 4)-(日志 100)
关于algorithm - 给定exp()函数,如何实现ln()函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22706077/