2014-06-23 66 views
5

如果我就與值的單精度操作,將給予8結尾的結果:Matlab的(2008A-32位)單精度的bug

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2)) 
ans = -5.4230008e+004 

然後我做任何操作,使用雙精度和相同的操作,前使用單精度,其結果將是從第一時間我運行它不同:在Matlab 2008A 32位

>> double(6.5000012e+02)*double(-64.1775131)*double(0.65)*double(2) 
ans = -5.423000858119204e+004 

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2)) 
ans = -5.4230004e+004 

就會發生此問題。這在Matlab 2012b 64位中不是問題。

有關如何避免此問題的任何想法?

謝謝。

+0

我無法在MATLAB版本8.2.0.701(R2013b)中重現此效果。我第一次獲得第二個單一結果。只是爲了記錄。 –

+0

我無法在MATLAB R2012a/32位(win32)上重現。 –

+0

另外,檢查這個,似乎有關:https://www.mathworks.com/matlabcentral/newsreader/view_thread/246425你似乎有權訪問R2012b,爲什麼不使用它? –

回答

2

我無法測試,但從我在MATLAB Central上可以找到的東西看來,它似乎是Global Workspace @versions R2008 *中的一個錯誤。所以,爲了避免這個問題:

  • 不要從命令窗口執行代碼;
  • 堅持雙精度,除非在嚴重的內存限制下(它更快,因爲默認類型是雙精度);
  • 工作在功能而不是腳本(顯然本地工作區的功能不受這個bug的影響)
  • 使用R2009 + MATLAB版本,這似乎已修復了這個錯誤。
+0

感謝您的答案。使用實際工作的功能! – RodrigoReis