0.1+0.2不等於0.3!
在滿多程式語言裡面0.1+0.2答案不會是等於0.3。 馬上打開console試看看吧!
我是在某天做報表的時候發現的,看到的時候直接傻眼。
馬上google一下。我記得我關鍵字是python float add,然後就看到這頁
https://docs.python.org/2/tutorial/floatingpoint.html
看完之後只能說是學習了。
或者說,現在吃到以前種的苦果了吧,哈哈哈。
簡單說明這個現象的話,原因就是電腦是二進位,而我們所使用的是10進位。
從二進制轉換成十進制的時候有些數字就是沒辦法精確地表示出來。
就像是1/3我們如果用10進位表示的話,
0.3, 0.33, 0.333333都不準,只能說後者比前者更加準確。
所以在二進位表現十進位的時候也是相同道理的。
而這也是為什麼會出現這種現象的原因。
所以coding的時候這個現象要小心呀!
尤其是數值比較的判斷式更要注意,否則會產生非預期結果。
有興趣的人可以google: 0.1+0.2喔!
相關內容:
https://en.wikipedia.org/wiki/IEEE_754-1985
https://docs.python.org/2/tutorial/floatingpoint.html
http://stackoverflow.com/questions/588004/is-floating-point-math-broken
我是在某天做報表的時候發現的,看到的時候直接傻眼。
馬上google一下。我記得我關鍵字是python float add,然後就看到這頁
https://docs.python.org/2/tutorial/floatingpoint.html
看完之後只能說是學習了。
或者說,現在吃到以前種的苦果了吧,哈哈哈。
簡單說明這個現象的話,原因就是電腦是二進位,而我們所使用的是10進位。
從二進制轉換成十進制的時候有些數字就是沒辦法精確地表示出來。
就像是1/3我們如果用10進位表示的話,
0.3, 0.33, 0.333333都不準,只能說後者比前者更加準確。
所以在二進位表現十進位的時候也是相同道理的。
而這也是為什麼會出現這種現象的原因。
所以coding的時候這個現象要小心呀!
尤其是數值比較的判斷式更要注意,否則會產生非預期結果。
有興趣的人可以google: 0.1+0.2喔!
相關內容:
https://en.wikipedia.org/wiki/IEEE_754-1985
https://docs.python.org/2/tutorial/floatingpoint.html
http://stackoverflow.com/questions/588004/is-floating-point-math-broken
留言
張貼留言