std::pow 不是 return 预期的 int 值

std::pow does not return the expected int value

下面的代码returns输出99。

#include<iostream>
#include <math.h>
using namespace std;
int Solve(int a)
{
    return (pow(a,2));
}
int main()
{
    int a=10;
    cout<<Solve(a)<<endl;
    return 0;
}

我不知道为什么会这样,而且,它对 5 和 25 也是如此,所以它与 5 的倍数有关。

P.S。是电脑坏了还是什么 :D

技术方面:std::pow 没有为 int 定义,只为 doublefloat 定义。因此,您不能依赖它返回准确的 int 值。您必须预料到舍入误差。

算法方面:使用朴素算法(n 乘法)计算 n 次方显然需要线性时间。为了提高大幂次的性能,std::pow 的大多数实现不使用这种朴素算法。相反,他们使用对数计算功率。这要快得多,但不如天真的方法正确。

因此,如果您需要精确的结果,则必须使用 for 循环来计算幂。