3 回答

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
630948893921274879大于最大整數(shù)可以在不進(jìn)行舍入的情況下進(jìn)行編碼?!案↑c(diǎn)數(shù)”(即浮點(diǎn)數(shù))的工作方式與科學(xué)記數(shù)法相同。它們存儲(chǔ)一定數(shù)量的有效數(shù)字,然后將其乘以某個(gè)二次方。630948893921274879需要比 float64 可以容納的更多有效數(shù)字,因此它會(huì)四舍五入到它可以表示的最接近的值。float64
如果需要處理這么大的整數(shù),則需要始終使用整數(shù)。不能轉(zhuǎn)換為浮點(diǎn)值。

TA貢獻(xiàn)1111條經(jīng)驗(yàn) 獲得超0個(gè)贊
float64
不會(huì)比“免費(fèi)”“更大”。它犧牲了精度和范圍。int64
在一定幅度之后,整數(shù)只能表示為最接近的 2。當(dāng)你變得更大時(shí),你最終會(huì)每4個(gè)跳過一次,然后每8個(gè)跳過一次,依此類推。

TA貢獻(xiàn)1995條經(jīng)驗(yàn) 獲得超2個(gè)贊
您的浮點(diǎn)數(shù)不能存儲(chǔ)為630948893921274879,而是最接近的模擬630948893921274880。以基數(shù) 2 為準(zhǔn),lg(630948893921274879) 介于 59 和 60 之間。因此,數(shù)字之間的間距為 2^(59-52) = 2^7 = 128。這意味著 2^59 和 2^60 之間的任何數(shù)字都將四舍五入到最接近的 128 的倍數(shù)。
解釋:浮點(diǎn)數(shù)(任何大小,不僅僅是64)不是一個(gè)數(shù)字,而是3個(gè)數(shù)字相乘。對于 64 位浮點(diǎn)數(shù):第一個(gè)數(shù)字是符號(hào),長度為 1 位。第二個(gè)數(shù)字是指數(shù),長度為 11 位。最后一個(gè)數(shù)字是有效數(shù)(AKA 尾數(shù)、分?jǐn)?shù)和其他一些名稱),長度為 52 位。最后一個(gè)數(shù)字是 -1^符號(hào) * 2^指數(shù) * 1.有效數(shù)。1.有效數(shù)將等于 1 和(幾乎)2 之間的數(shù)字。這意味著,每次達(dá)到2的倍數(shù)時(shí),指數(shù)將增加,有效數(shù)將重置。由于指數(shù)增加,您獲得的數(shù)字的準(zhǔn)確性將降低一半,因?yàn)橛行?shù)的最微小的增加現(xiàn)在將是兩倍大。您的數(shù)字恰好位于有效數(shù)的最小變化導(dǎo)致增加128的點(diǎn);因此,您的數(shù)字將四舍五入到最接近的 128 的倍數(shù)。因此,導(dǎo)致問題的不是 float64 到 int 的轉(zhuǎn)換,而是 float64 本身。
- 3 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)