當std::numeric_limits::digits10<float>
返回7這是否意味着我有7個有意義的數字後點或7與左側部分?std :: numeric_limits :: digits10 <float>和點後的精度
例如是像:
1.123456
12.12345
或是像
12.1234657
當std::numeric_limits::digits10<float>
返回7這是否意味着我有7個有意義的數字後點或7與左側部分?std :: numeric_limits :: digits10 <float>和點後的精度
例如是像:
1.123456
12.12345
或是像
12.1234657
的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:這是您的第一個案例。
你試過了嗎? – Ceros
Ceros:不,我該怎麼辦? – Guillaume07
Ceros:試着做一次往返? – Guillaume07