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
定义,只为 double
和 float
定义。因此,您不能依赖它返回准确的 int
值。您必须预料到舍入误差。
算法方面:使用朴素算法(n 乘法)计算 n 次方显然需要线性时间。为了提高大幂次的性能,std::pow
的大多数实现不使用这种朴素算法。相反,他们使用对数计算功率。这要快得多,但不如天真的方法正确。
因此,如果您需要精确的结果,则必须使用 for
循环来计算幂。
下面的代码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
定义,只为 double
和 float
定义。因此,您不能依赖它返回准确的 int
值。您必须预料到舍入误差。
算法方面:使用朴素算法(n 乘法)计算 n 次方显然需要线性时间。为了提高大幂次的性能,std::pow
的大多数实现不使用这种朴素算法。相反,他们使用对数计算功率。这要快得多,但不如天真的方法正确。
因此,如果您需要精确的结果,则必须使用 for
循环来计算幂。