在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操作返回未定义的行为,但是有人可以帮助解释它为什么会给出这样的值吗?
答案 0 :(得分:2)
整个计算变为浮点数,然后转换为64位整数。但是浮点数不能准确地表示大整数,除非它们恰好是2的幂。