请有人向我解释
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
int sum = 0;
for(int j = 0; j < 3; j++) {
sum += 24 * pow(10, 3 - j - 1);
}
cout << sum << endl;
return 0;
}
这是我的小程序,它打印错误答案(2663而不是2664),但是当我写 1 * pow(...)而不是24时,一切都很好。我很困惑
答案 0 :(得分:-1)
没有pow()
的实现返回int
,因此显然返回float
的实现被编译器选为默认实现。
float
的问题在于它不能代表所有数字,它适用于近似值。这意味着此pow()
的某些结果可能不是您所期望的完全整数。
当您尝试将pow()
的结果存储到变量int
中时隐式转换为sum
,类型为int
时,小数会被截断,造成信息丢失。
为防止此类信息丢失,请使用double
代替int
。使用double
进行操作时,将使用返回pow()
的{{1}}的实现,并且它应该没有问题给您正确的答案,什么都不会被截断并且信息不会丢失。