2011-04-13 45 views
1

有人可以向我解釋發生了什麼?strtod更改最後一位

double dbl = stdtod("9999999999999999", NULL); 

我得到的值:9999999999999998
而不是:9999999999999999

我不明白,爲什麼出現這種情況,在MSDN,被指定的最大雙號爲1.7976931348623158E+308,所以它可以」 t是溢出。

謝謝

+2

但它並不是說所有的數字之間的最小值和最大值是可以代表的。 [「每個計算機科學家應該知道的關於浮點運算的知識」](http://www.engrng.pitt.edu/hunsaker/3097/floatingpoint.pdf)中的血淋淋細節。 – 2011-04-13 18:56:40

回答

2

它不是溢出它與浮點運算的問題。您有一個有限數字的有限數字,在溢出之前已經超過很長時間。這已被鏈接聽到很多次,但退房this