当我在 https://learn.microsoft.com/en-us/cpp/cpp/constexpr-cpp?view=vs-2019 阅读有关 constexpr 的内容时,我看到了如下所示的指数函数的实现。 .我试图理解其中的逻辑,但无法理解。
我已经尝试在 Youtube 和 Google 上搜索解释,但没有成功。那么,有人可以提供我可以阅读或解释的资源吗?
constexpr float exp(float x, int n)
{
return n == 0 ? 1 :
n % 2 == 0 ? exp(x * x, n / 2) :
exp(x * x, (n - 1) / 2) * x;
};
最佳答案
事情是这样的:我们试图在 y = x ^ n
中找到 y
。请注意,exp
在这里是错误的名称 - 它应该是 pow
(来自 power)。整个想法基于这个数学方程式:
x ^ n = (x * x) ^ (n / 2) // assuming n is even
当 n
为奇数时,我们该怎么办?我们从 n
中减去一个,并将结果乘以 x
:
x ^ n = x * (x ^ (n - 1)) // assuming n is odd
因为 n
是奇数,所以 n - 1
是偶数并且您使用前面的等式。
编辑:
为此,n
必须是非负数,因此 unsigned int
是 n
的更好类型。
关于c++ - 有人可以向我解释下面指数函数背后的数学原理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131514/