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個字節,它不會給出很多精度的十進制數字。 –