3
我從wikipedia是雙號最多有15-17顯著十進制數字15位二進制64位小數?
然而,對於低於
double x = std::pow(10,-16);
std::cout<<"x="<<std::setprecision(100000)<<x<<std::endl;
(爲了測試它,使用this online shell),我得到了簡單的C++程序學
x=9.999999999999999790977867240346035618411149408467364363417573258630000054836273193359375e-17
其中有88個重要的十進制數字,顯然與Wiki的上述聲明相矛盾。任何人都可以澄清我應該誤解的東西嗎?謝謝。
這些數字中的大部分都*不*顯着;他們中的大多數無法區分這個值與下一個最大或最小可能的「雙」值。 –
@大衛:我投票重新開放(沒有意識到我的投票由於我的金徽章...);我認爲這不是[標準的「爲什麼FP被破壞?」 - 類型的問題](http://stackoverflow.com/questions/588004/is-floating-point-math-broken);它是在詢問標準精確索賠和'setprecision'行爲之間的明顯差異。 –
@OliverCharlesworth我相信這是一個老問題,就像往常一樣,關於可表示性 –