math – 电源功能是否在恒定时间内运行?

当我在C#中使用Math.Pow(double x,double y)等幂函数或C中的math.h pow函数时,这些函数是否在恒定时间内运行?

我问的原因是因为我想知道表格(1-t)^ n * p0 … t ^(n)* pN上的“预先计算的”bézier函数是否可以在线性时间内运行,然后可能是比采用控制点和t作为参数的De Casteljaus算法更快.

最佳答案 我认为这些方法使用基于迭代的处理来获得结果,并且只有当两次迭代的值之间的差异低于给定的误差常数时才停止.

迭代方法可以非常快速地收敛到动力操作的结果……所以我认为它们几乎是恒定的时间.

这个问题有很多很好的解释:
How is Math.Pow() implemented in .NET Framework?

编辑

我在http://math.stackexchange.com找到了许多合适的材料.

> Fastest way to calculate e^x upto arbitrary number of decimals?
> How to calculate e^x with a standard calculator
> How can I calculate non-integer exponents?
> Numerically estimate a^b
> Approximation of e^(−x)

这个非常有趣,因为它解释了使用人类语言计算取幂的方法:

> How to Use a Fixed Point to Calculate an Exponentiation

思考

我不是数学天才,但据我所知,所花费的时间并不是很大程度上取决于您选择的值,而是取决于您想要的精确位数.我想说的是它取决于论点,但有一个最大值.

另外,为了支持这个理论,请看一下这个算法(由Sun实现):http://pastebin.com/LDjS5mAR.没有循环,只有ifs.我认为这是因为实现它的人选择了他们想要的固定精度……然后扩展了保证精度所需的所有迭代.

例如,可以像这样轻松扩展不变迭代次数的循环:

for (int it = 0; it < 5; it++)
    a *= a;

是相同的:

a *= a; a *= a; a *= a; a *= a; a *= a;
点赞