為什麼double型1 00002轉換成float型會變成1 00019999999?

時間 2021-06-05 05:12:47

1樓:勝勳

double和float都不是精確的 1.00002

只是double有效位52位,尾巴更長而已

float有效位23位,尾巴變短了

2樓:連冠榮(Mac)

因為float的有效數比double少

對於十進位制數345.67用科學計數法可以表示為3.4567 * 10^2,其中3.

4567有很多英文叫法,有叫fraction part,或者叫characteristic,或者mantissa,但是大多數習慣叫significand。我們這裡統一稱這一部分為significand。345.

67除了可以表示為3.4567 * 10^2,還可以表示為0.34567 * 10^3,0.

034567 * 10^4,但是通常情況下,把sigificand介於[1, 10)的形式稱為標準形式(nomalized form)。

對於二進位制,也有類似的情形。比如二進位制小數101.1101 = 1.

011101 * 2^2 = 0.1011101 * 2^3 = 0.01011101 * 2^4,其中把significand介於[1, 2)之間的形式稱為標準形式,1.

011101 * 2^2就是101.1101科學計數法的標準形式。

有了上面的理解,那麼我們就可以把任何二進位制浮點數都化成如下標準形式:

(+/-)1.f * 2^e

其中(+/-)表示正負號,f表示signifcand的小數部分,e表示指數。而二進位制的浮點數(無論是單精度,還是雙精度)在計算機內部的儲存格式就是依據上述的標準形式,被劃分成3部分:

C 中超出精度double型別的值為什麼會出現這種現象?

邱昊宇 真心沒那麼複雜。問 比 3 小的最大 double 究竟是多少?答 是 std nextafter 3.0,2.0 比如 double maxBelowThree std nextafter 3.0 2.0 auto uniqueDigits std numeric limits max d...

肺活量10000 什麼水平?

久處不厭只若初見 看看1萬的都是什麼人就知道資料準不准了,高中生資料大都在2 4千,經常運動的能有5 6千,肺活量不僅看個人的努力程度,也有機器的準確度,測試人員多了機器沒有校準等都會導致資料異常,數值偏大 鈦合金左腳 身高174,體重70公斤,從小喜歡踢球,讀大學時,測過幾次,一直9000 在班裡...

什麼情況下double替換float?

你不在意精度的時候就能換,其實更嚴謹的說法是你不在意精度並且範圍不會越界,就可以換。因為截斷的原因,浮點數的二進位制和十進位制的表達有一些區別。一些十進位制的小數比如0.3實際並沒有二進位制的精確表達,所以double和float由於截斷的長度不同使得這些數表面上看是同乙個數實際卻不相等。這些差異是...