[英]Precision of double after decimal point
在午休時間,我們開始討論double
值類型的精度。
我的同事認為,小數點后總是有15位。
在我看來,人們無法分辨,因為IEEE 754沒有對此做出假設,它取決於第一個1
在二進制表示中的位置。 (即小數點前的數字大小也計算在內)
怎么能做出更合格的陳述?
如C#引用所述,精度在小數點之前或之后為15到16位(取決於所表示的小數值)。
簡而言之,你是對的,它取決於小數點前后的值 。
例如:
12345678.1234567D
//右邊的下一個數字將向上舍入 1234567.12345678D
//右邊的下一個數字將向上舍入 完整示例: http : //ideone.com/eXvz3
此外,試圖將double
值視為固定的十進制值並不是一個好主意。
你錯了。 普通double
精度具有53 位精度。 這大致相當於16位十進制數字,但是將double
值視為十進制數會導致混亂的結束,最好避免。
也就是說,你比同事更接近正確 - 精確度與所表示的價值相關; 足夠大的double
s 沒有精度的小數位數。
例如,下一個大於4503599627370496.0
是4503599627370497.0
。
C#double根據IEEE 754表示,具有53位有效數和p (或尾數)和11位指數e ,其范圍在-1022和1023之間。因此它們的值是
p * 2^e
有效數字始終在小數點前有一位數,因此其小數部分的精度是固定的。 另一方面,double中小數點后的位數也取決於其指數; 指數超過有效數的小數部分中的位數的數字本身沒有小數部分。
每個計算機科學家應該知道的關於浮點算術的內容可能是關於這個主題的最廣泛認可的出版物。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.