c++ - 有人可以向我解释下面指数函数背后的数学原理吗?

标签 c++ exponential

当我在 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 intn 的更好类型。

关于c++ - 有人可以向我解释下面指数函数背后的数学原理吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57131514/

相关文章:

c++ - 使 -std=c++11 成为 mac 终端的默认值

postgresql bigint 太大了吗?

c++ - 计算矩阵的 n 次方

java - bigdecimal 减法结果为指数

math - 避免指数计算中的舍入误差

c++ - 使用 FIONREAD 调用 ioctl() 会在明显的竞争条件下产生奇怪的副作用,

c++ - header 保护文件中结构的重复符号

c++ - 使用 libcurl 编写 HTTPS SOAP 客户端

c++ - 未创建 Keil uVision5 .axf 文件

java - 编写自定义代码来计算 BigDecimal 幂