1-0.99=?

1-0.99=?
下面我們來(lái)看一下代碼:

public static void main(String[] args) {
double a=1;
double b=0.99;
System.out.println(a-b);
   }

真實(shí)的結(jié)果是0.010 00000 00000 00009。
解釋:
關(guān)于精度損失的原理可以很簡(jiǎn)單的講,首先一個(gè)正整數(shù)在計(jì)算機(jī)中表示使用01010形式表示的,浮點(diǎn)數(shù)也不例外。
比如11,11除以2等于5余1
5除以2等于2余1
2除以2等于1余0
1除以2等于0余1
所以11二進(jìn)制表示為:1011。
double類型占8個(gè)字節(jié),64位,第1位為符號(hào)位,后面11位是指數(shù)部分,剩余部分是有效數(shù)字。正整數(shù)除以2肯定會(huì)有個(gè)盡頭的,之后二進(jìn)制還原成十進(jìn)制只需要乘以2即可。
舉個(gè)例子:0.99用的有效數(shù)字部分,
0.99 * 2 = 1+0.98 --> 1
0.98 * 2 = 1+ 0.96 --> 1
0.96 * 2 = 1+0.92 -- >1
0.92 * 2 = 1+0.84 -- >1
...............
這樣周而復(fù)始是沒(méi)法有盡頭的,而double有效數(shù)字有限,所以必定會(huì)有損失,所以二進(jìn)制無(wú)法準(zhǔn)確表示0.99,就像十進(jìn)制無(wú)法準(zhǔn)確表示1/3一樣。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容