0.1+0.2 != 0.3 ? WHY ???

面試中經常問道0.1+0.2 != 0.3的原因

小數的二進制表示

相信很多人都能輕而易舉的算出一個正整數的二進制表示,但是都沒有考慮過小數怎麼表示。JS中數值使用的爲64位表示,這其中1位表示的是符號位(正數還是負數),52位表示小數,還有剩餘的11位表示整數。
對於整數大家應該都知道是對2取餘,去求一個數的二進制,比如 9 這個正整數

		   餘數
	9/2 --> 1
	4/2-->  0    
	2/2 --> 0 
	1 
	從下往上一次得出 9的二進制爲 1001 

整數的正負 由最高位決定 最高位爲0 爲正數,最高位是1,爲負數 。
那麼對於小數呢 ,正好和整數相反,整數是對2取餘,而小數是對2求積。比如0.1這個小數

			小於1 爲0, 大於1 爲 1 ,對其結果 -1後繼續 *2 ,直到等於1爲止
	0.1*2 --> 0
	0.2*2 --> 0
	0.4*2 --> 0
	0.8*2 --> 1 (1.6-1)
	0.6*2 --> 1 (1.2-1)
	0.2*2 --> 0
	0.4*2 --> 0
	0.8*2-->  1
	........

由此我們得知了0.1是一個循環的 0.0001100110011001100110011001100110011001100110011001101
同理我們可以根據以上方法求得 0.2的二進制表示
0.001100110011001100110011001100110011001100110011001101
根據二進制求和得出結果爲 0.0100110011001100110011001100110011001100110011001101
轉爲十進制 則等於0.30000000000000004 != 0.3 所以當前的等式不成立。

到這兒我覺着你應該搞清了吧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章