在mingw32中将double转换为int?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (55)

我无法解释以下程序的功能(在mingw 32位上使用gcc编译)。 我意识到隐式地从double转换为int时可能出现的精度损失,但是我希望这两种情况可以提供相同的输出,因为它执行完全相同的操作。 为什么这两个输出不同?

#include <stdio.h>
#include <math.h>

int main()
{
    int table[3] = {2, 3, 4};
    int i, N;

    N = 0;
    N += table[0] * pow(100, 0);
    N += table[1] * pow(100, 1);
    N += table[2] * pow(100, 2);
    printf("%d\n", N);

    N = 0;
    for(i = 0; i < 3; i++)
        N += table[i] * pow(100, i);
    printf("%d\n", N);

    return 0;
}

//output: 
40302
40300
提问于
用户回答回答于

pow(100,0) pow(100,1)pow(100,2),编译器用常量(1,100,10000)替换函数调用,但用pow(100,i)它必须实际调用 函数在运行时(因为变量我被作为参数传递),结果得到两个pow的结果,形式为0.9999999999.999999,而不是1和100(或3中的任意两个)。

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问5 回答
  • 找虫虫

    0 粉丝0 提问5 回答
  • 人生的旅途

    10 粉丝484 提问4 回答
  • 骑牛看晨曦

    4 粉丝522 提问4 回答

扫码关注云+社区

领取腾讯云代金券