2013-10-03 133 views
-4

我有一些有趣的好奇心計算機如何計算浮點數0.1?
在wolfram alpha中,查詢「0.1 to binary」無限地獲得二進制浮點數。
但C++編譯器(xcode)完全計算0.1。
這怎麼可能?計算機如何計算float 0.1?

+6

閱讀[IEEE 754](http://en.wikipedia.org/wiki/IEEE_754)標準。您可能還想閱讀[每位計算機科學家有關浮點運算的知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –

+1

C++編譯器不會精確地生成0.1;它在有限的位數上截斷無限表示。如果你真的很努力,你將能夠發現它們之間的差異 - 但是需要一些技巧來做點擊(或者濫用'printf(「%。25f \ n」,0.1);')。 –

回答

3

由於四捨五入,你可以從有限的二進制表示得到原始的小數。如果您嘗試以更高的精度打印數字,它不會精確到0.1。 Working example

#include <iostream> 
#include <iomanip> 
using namespace std; 

int main() { 
    float f = 0.1f; 
    cout << f << endl; 
    cout << setprecision(10) << f << endl; 
}