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

Rod*_*eis 5 matlab

如果我使用值进行单个精度操作,它将给出以8结尾的结果:

>> single(single(6.500001e+02)*single(-64.1775131)*single(0.65)*single(2))
ans =   -5.4230008e+004
Run Code Online (Sandbox Code Playgroud)

然后我使用双精度进行任何操作,并且操作与之前相同,使用单精度,结果将与我第一次运行时不同:

>> 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
Run Code Online (Sandbox Code Playgroud)

这个问题发生在Matlab 2008a 32位.这在Matlab 2012b 64位中不是问题.

有关如何避免这个问题的任何想法?

谢谢.

小智 2

我无法测试,但从我在 MATLAB Central 上找到的内容来看,这似乎是全局工作区 @versions R2008* 中的一个错误。因此,为了避免这个问题:

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