Matlab(2008a-32位)单精度bug

Matlab(2008a-32位)单精度bug,matlab,Matlab,如果我对这些值进行单精度运算,结果将以8结尾: >> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2)) ans = -5.4230008e+004 然后我使用双精度进行任何操作,与之前相同的操作,使用单精度,结果将与第一次运行时不同: >> double(6.5000012e+02)*double(-64.1775131)*double(0.65)*double(2) an

如果我对这些值进行单精度运算,结果将以8结尾:

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2))
ans =   -5.4230008e+004
然后我使用双精度进行任何操作,与之前相同的操作,使用单精度,结果将与第一次运行时不同:

>> 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
这个问题发生在Matlab2008a 32位中。这在Matlab 2012b 64位中不是问题

有没有关于如何避免这个问题的想法


谢谢。

我无法进行测试,但从MATLAB Central上的发现来看,它似乎是全局工作区@versions R2008*中的一个bug。因此,为了避免出现问题:

  • 不要从命令窗口执行代码
  • 坚持双精度,除非在严重的内存限制下(因为默认类型是double,所以速度更快)
  • 在函数而不是脚本中工作(显然函数本地工作区不受此bug的影响)
  • 使用R2009+MATLAB版本,它似乎已经修复了这个bug

我无法在MATLAB版本8.2.0.701(R2013b)中再现这种效果。我得到了第二个单一结果,也是第一次。仅供记录。我无法在MATLAB R2012a/32位(win32)上复制。此外,请检查此项,似乎相关:您似乎可以访问R2012b,为什么不使用它?我不再使用2008a,但我认为此版本存在单精度问题。尝试使用另一个版本。我的猜测是在Mathworks论坛上提问,因为Mathworks员工将能够查看实际代码以确定是否存在bug。这看起来确实像是一个bug,他们在后续版本中修复了它。:-)谢谢你的回答。使用函数确实有效!