2017-03-02 77 views

回答

2

cppreference

的std :: numeric_limits的值:: digits10是多少基數爲10的數字,可以用類型T表示而不用改變,也就是說,可以轉換具有這麼多十進制數字的任何數字編輯爲類型T的值並返回小數形式,而不會因四捨五入或溢出而發生更改。對於基數類型,它是數字(浮點類型的數字-1)乘以日誌(基數)並向下舍入。

後來

標準32位IEEE 754浮點類型都有一個24位小數部分(23個比特寫入,一個隱含的),這可能表明,它可以代表7位小數(24 * std :: log10(2)爲7.22),但相對舍入誤差不均勻,並且一些具有7個十進制數字的浮點值不能轉換爲32位浮點數並返回:最小的正數示例爲8.589973 e9,往返後變成8.589974e9。這些舍入誤差不能超過表示中的一位,並且數字10計算爲(24-1)* std :: log10(2),即6.92。舍入結果的值爲6.

這意味着,例如,

cout << std::numeric_limits<float>::digits10; // 6 
cout << std::numeric_limits<float>::digits; // 24 

第二個是數字的尾數的數量,同時所述第一個的,能安全跨越上述轉換來表示小數的位數。

TL; DR:這是您的第一個案例。

相關問題