0

给定 a double x,我们知道使用它来x*x代替更有效pow(x,2)。想象一下,为了简单起见,我们必须计算 : 的平方根,x因为它是一元运算,为此我们有sqrt(x)。现在,提高x到二次方也是一元运算,但我们没有(据我所知)pow2(x)

我将自己的实现pow2为:

inline double pow2(double a){return a*a;}

这应该仍然比 更好pow(a,2),但它基于*非一元运算符。如何实现真正的一元实现pow2?这会是获得 a 的二次方的最有效方法double吗?

注意:我知道正实数的每一个实数幂都是一元运算,从实际的角度来看,定义无限数量的pow2, pow3, pow3.14... 是无稽之谈,我对此非常满意pow(double, double)

4

1 回答 1

3

x*x“使用比使用更有效pow(x,2)

不一定更有效率。可能是一样的。C 允许对此类函数进行分析,pow()并且两者都可以发出相同的代码。

pow2()pow(a,2). _

如果真的担心,请分析您的代码。然而,在一个平台上最好的东西在其他平台上可能会有所不同。

如何实现 pow2 的真正一元实现?

inline double pow2(double a){return a*a;}没关系。

这会是获得双倍的二次方最有效的方法吗?

“最有效”-> 我建议没有功能,只是x*x.


另请注意,C 允许 FP 以所需的更高精度进行评估。研究FLT_EVL_METHOD以最有效的方式获得具有函数的 double 的二次方的目标可能会破坏整体性能。

于 2018-11-15T18:54:46.770 回答