C 或 C++ 中的一元运算符,用于数字的二次幂

Unary operator in C or C++ for the second power of a number

给定 double x,已知使用 x*xpow(x,2) 更有效。为简单起见,假设我们必须计算 x 的平方根:因为它是一元运算,为此我们有 sqrt(x)。现在,也提高 x 的二次方是一元运算,但我们没有像(据我所知)pow2(x).

我将自己的 pow2 实现为:

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

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

注意:我知道一个事实,即正实数的每个实数幂都是一元运算,定义无限多个 pow2pow3pow3.14...从实用的角度来看,我对 pow(double, double) 非常满意。

"it is more efficient to use x*x instead of pow(x,2)"

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

pow(a,2) 相比,编译器可能不会分析您的 pow2() 并创建次优代码。

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

How to implement a genuine unary implementation of pow2?

inline double pow2(double a){return a*a;} 可以。

Would it be the most efficient way to obtain the second power of a double?

"most efficient" --> 我建议不要函数,只是 x*x.


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