當我在matlab中嘗試下面的代碼時,a和b不等於不應該是那個?爲什麼0.3不是「==」到0.1 * 3?
a = 0.3
b = 0.1*3
a == b
這是一個錯誤還是我使用錯誤的操作符來比較數字?
當我在matlab中嘗試下面的代碼時,a和b不等於不應該是那個?爲什麼0.3不是「==」到0.1 * 3?
a = 0.3
b = 0.1*3
a == b
這是一個錯誤還是我使用錯誤的操作符來比較數字?
兩者並不相同,因爲浮點運算具有一定的精度。檢查差異(a-b)
它應該非常小。
對於大多數編程語言,答案只是「處理它,與容差比較」,但matlab有一個符號工具箱。這還包括有理數,並允許爲某些功能消除此問題。不要期望這是一個簡單的解決方案。
是的,這個問題不斷以某種形式出現在計算器上。就我個人而言,我喜歡[math.stackexchange.com上的問題,只是標題爲「數學平等不起作用」](http://math.stackexchange.com/questions/434438/matlab-equal-does-not-work) 。用來比較浮點數的「右」運算符可能是一個「幾乎相等」的測試,如'abs(a - b)<ε>。 – chappjc
這不是一個錯誤。這是因爲*相對精度浮點不精確*(0.1 * 3和0.3之間的結果在顯示時,即使它們都被「舍入」到「0.3」)的位數之間的差異很小)。 – user2864740
當我嘗試一個 RollerBoy
請參閱http://stackoverflow.com/questions/686439/why-is-24-0000-not-equal-to-24-0000-in-matlab,http://stackoverflow.com/questions/6477178/about-浮點精度爲什麼迭代數不是相等的?lq = 1(注意使用fprintf來顯示更高的精度),[每個計算機科學家應該知道什麼關於浮點](http:/ /www.validlab.com/goldberg/paper.pdf),http://www.mathworks.com/matlabcentral/newsreader/view_thread/66553 – user2864740