2010-09-17 25 views
0

在C++中, 對於浮點數給setprecision()後顯示的隨機數字是什麼?Setprecision()爲C++中的浮點數?

注:設置固定標誌後。

例如:

float f1=3.14; 
cout < < fixed<<setprecision(10)<<f1<<endl; 

我們得到剩下的7個位數的隨機數?但雙倍的情況並非如此。

回答

6

有兩件事情需要注意的:

  1. float s的存儲二進制文件。
  2. float最多有24個有效位。這相當於7.22有效數字。

因此,對於您的計算機,沒有像3.14那樣的編號。您可以使用float最接近3.1400001049041748046875。

double有53個有效位(〜15.95位有效數字),所以你可以得到更準確的近似值,3.140000000000000124344978758017532527446746826171875。 「噪音」數字不會與setprecision(10)一起顯示,但會與setprecision(17)或更高顯示。

1

他們並不是真正的「隨機」 - 他們是(最好的)小數二進制分數表示(是準確的只爲分數分母爲2的冪,例如,3.125顯示究竟)。

當然,這取決於可用來表示最接近您最初輸入爲文字的十進制小數的二進制小數的位數,即單精度浮點數和雙精度浮點數。

並非真正的C++特定問題(適用於使用二進制浮點數的所有語言,通常是利用機器的底層硬件,即大多數語言)。對於一個非常裸露的教程,我建議閱讀this