32位系统中整数和浮点数之间的数学运算

时间:2016-12-21 01:25:58

标签: c

在32位系统上,我发现下面的操作总是在< 2 ^ 31但返回随机结果,其中a更大。

uint64_t a = 14227959735;
uint64_t b = 32768;
float c = 256.0;
uint64_t d = a - b/ c; // d returns 14227959808

我认为这里的问题是int-to-float操作返回未定义的行为,但是有人可以帮助解释它为什么会给出这样的值吗?

1 个答案:

答案 0 :(得分:2)

整个计算变为浮点数,然后转换为64位整数。但是浮点数不能准确地表示大整数,除非它们恰好是2的幂。