2016-04-14 45 views
0

爲什麼std::numeric_limits<Any Int Type>::digits10比它小1?例如,std::numeric_limits<int8_t>::digits10 == 2,但是100由三位數字組成。爲什麼std :: numeric_limits :: digits10對於int類型是少一個?

std::numeric_limits<int64_t>::digits10 == 18,但INT64_MAX(9'223'372'036'854'775'807)由19個數字組成。

+1

[cppreference](http://en.cppreference.com/w/cpp代表/ types/numeric_limits/digits10)表示:「具有這麼多小數位的任何數字都可以由類型保存」。由於999不能用'int8_t'表示,所以答案不能是3. –

+0

@KerrekSB哈,明白了。謝謝! – vladon

回答

1

std::numeric_limits<T>::digits10是數字在某種意義上保證數量與多個數位的數目可以在類型T沒有上溢或信息損失來表示。

E.g. std::numeric_limits<int64_t>::digits10不能爲19因爲9'223'372'036'854'775'808有19位數字,但不能在int64_t中表示。

digits<N>一般情況下,這樣保證值將總是從上平臺上,此「少了一個」差異遭受其中digits<N>是不用於內部表示的radix功率。在非特例情況下,radix爲2.由於10不是2的冪,所以digits10比最大值的長度小1。

如果包含std::numeric_limits<T>digits16digits8對於基數2平臺,這些值將是「精確」的。

1

的numeric_limits ::數字的定義如下:

的std :: numeric_limits的值:: digits10是底數爲10的數字,可以通過不加改變的類型T表示的數量,即,任何具有這麼多十進制數字的數字都可以轉換爲T類型的值並返回十進制形式,而不會因四捨五入或溢出而改變。

這意味着,是中int8_t 2個位數,因爲有一些3位數號碼不能與中int8_t(即999)

相關問題