algorithm - 给定exp()函数,如何实现ln()函数呢?

标签 algorithm math

我在参加 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/

相关文章:

将多维数组转换为一维数组的算法

arrays - 在线性时间中将两个离散随机变量相加的概率质量

c++ - C++ 中的积分(数学)

math - 我可以使用单应性将相机图像点投影到地面(2D 平面)吗?

java - 在 Java 中循环并获取总和,而不使用任何内置函数

math - % 运算符的 Lua 替换

algorithm - 我有一个 OpenGL Tessellated Sphere,我想在其中切一个圆柱形孔

c# - 每个用户在一个窗口内选择随机时间的算法

java - 反向然后添加序列 : Big-O runtime of my solution?

c++ - SUBSEQ spoj 中的错误答案