-4
我有一些有趣的好奇心計算機如何計算浮點數0.1?
在wolfram alpha中,查詢「0.1 to binary」無限地獲得二進制浮點數。
但C++編譯器(xcode)完全計算0.1。
這怎麼可能?計算機如何計算float 0.1?
我有一些有趣的好奇心計算機如何計算浮點數0.1?
在wolfram alpha中,查詢「0.1 to binary」無限地獲得二進制浮點數。
但C++編譯器(xcode)完全計算0.1。
這怎麼可能?計算機如何計算float 0.1?
由於四捨五入,你可以從有限的二進制表示得到原始的小數。如果您嘗試以更高的精度打印數字,它不會精確到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;
}
閱讀[IEEE 754](http://en.wikipedia.org/wiki/IEEE_754)標準。您可能還想閱讀[每位計算機科學家有關浮點運算的知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 –
C++編譯器不會精確地生成0.1;它在有限的位數上截斷無限表示。如果你真的很努力,你將能夠發現它們之間的差異 - 但是需要一些技巧來做點擊(或者濫用'printf(「%。25f \ n」,0.1);')。 –