在32位系统上,我发现下面的操作始终在A&lt时返回正确的值;2^31,但在较大的情况下返回随机结果。
uint64_t a = 14227959735;
uint64_t b = 32768;
float c = 256.0;
uint64_t d = a - b/ c; // d returns 14227959808
我相信这里的问题是int to-loploat操作返回不确定的行为,但是有人可以帮助解释为什么它给出了这样的价值?
整个计算都流向浮点,然后将其施放到64位整数。但是浮子不能准确地表示大整数,除非它们恰好是两个的力量。