0
在32位系统上,我发现下面的操作总是返回正确的值,但返回的是随机结果,其中a更大。32位系统中整数和浮点数之间的数学运算
uint64_t a = 14227959735;
uint64_t b = 32768;
float c = 256.0;
uint64_t d = a - b/ c; // d returns 14227959808
我相信这里的问题是,INT-漂浮的操作返回未定义的行为,但也有人有助于解释为什么它给出这样的价值呢?
浮点计算只能精确到7位http://stackoverflow.com/questions/9765744/precision-in-c-floats – pm100
没有什么随机或未定义的,并且你得到的结果是非常接近正确的(关闭一亿分之一)。这只是一个舍入误差。如果你使用'double'而不是'float',你会得到确切的结果,尽管对于更大的输入值你仍然可以得到舍入误差。 –
有大量的问题可能是重复的;我选择的那个人的优点是成为最老的人之一(它有很好的答案)。顺便说一句,在64位系统上的结果是一样的;问题是'float'(几乎总是)使用4个字节,它不会给出很多精度的十进制数字。 –