2014-01-17 87 views
3

C++標準保證我們只能安全地往返十進制值,最大爲 ,對於double,值爲std::numeric_limits<double>::digits10。 閱讀本post後,我不知道是否爲整數值此閾值,它延伸到std::numeric_limits<double>::digits10 +1安全往返整數值與IEEE 754浮點雙精度數據類型

+0

C++標準和IEEE 754是無關的。 –

+2

@ n.m。完全注意。 C++定義了'std :: numeric_limits :: is_iec559'(或類似的東西),它告訴我們實現是否符合IEEE 754.如果這是真的,那麼詢問如何讓C++操作符生成754個操作適合於特定的目的。 – Potatoswatter

+4

std :: numeric_limits :: digits10 + 1是16,並且不能往返全部16位整數(例如,9007199254740993返回爲9007199254740992)。 –

回答

2

的std :: numeric_limits :: digits10是15,因爲只有是15位或更小,保證往返值從小數到雙精度和返回。一些16位數值會往返,但不是全部。在整數情況下,只有那些< = 2^53 = 9007199254740992才能保證往返(因爲它們完全表示)。 9007199254740993,例如,返回爲9007199254740992.

+1

請注意,只有奇數有問題,偶數就可以,直到達到18014398509481984。 –

+0

@ MarkRansom是的,這是一個更好的方式來表達它。這聽起來並不神祕,「一些16位數值會往返,但不是全部」。 –

相關問題