c ++ //错误的输出......发生了什么?

时间:2016-04-10 20:22:18

标签: c++

请有人向我解释

#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时,一切都很好。我很困惑

1 个答案:

答案 0 :(得分:-1)

没有pow()的实现返回int,因此显然返回float的实现被编译器选为默认实现。

float的问题在于它不能代表所有数字,它适用于近似值。这意味着此pow()的某些结果可能不是您所期望的完全整数。

当您尝试将pow()的结果存储到变量int中时隐式转换为sum,类型为int时,小数会被截断,造成信息丢失。

为防止此类信息丢失,请使用double代替int。使用double进行操作时,将使用返回pow()的{​​{1}}的实现,并且它应该没有问题给您正确的答案,什么都不会被截断并且信息不会丢失。