不同的结果在2013年的32位和64位单精度

3视图(30天)
我平方求和两个数字在单精度,然而我得到不同的结果(一点)Matlab 32位和Matlab 64位在同一Win64电脑。此外,得到不同的结果在Matlab 32位之间的多个实现同样的方程……
谁能提供一些见解?
代码复制:
格式十六进制
一个= ([-0.1113907,0.64]);
%方法1(32位错?)
r1 = (1) ^ 2 + (2) ^ 2
%方法2(32位错?)
r2 = (1) * (1) + (2) * (2)
%方法3(正确)
tmp1 = (1) ^ 2;tmp2 = (2) ^ 2;
r3 = tmp1 + tmp2
%方法4(正确)
r4 =(^ 2)和
Matlab 32位结果:
r1 =
3 ed8116a
r2 =
3 ed8116a
r3 =
3 ed8116b
r4 =
3 ed8116b
Matlab 64位的结果:
r1 =
3 ed8116b
r2 =
3 ed8116b
r3 =
3 ed8116b
r4 =
3 ed8116b

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2013年8月20日
不同的执行路径和不同的处理器(甚至处理器模式)有不同的舍入的影响。
1评论
乔纳森·柯里
乔纳森·柯里 2013年8月21日
虽然这是有道理的,我重复这个问题在C语言中使用x86和x86 - 64基于相同的PC和有相同的解决方案(相同的)。因此指令集也应该显示这些构建之间的差异?我有两个版本的Matlab使用只有一个核心(通过设置关联)——没有线程的影响。
你能扩大也许发生了什么更通过Matlab ?问题是可重复的多个计算机、操作系统和处理器的变化。

登录置评。

答案(1)

艾特威尔肯
艾特威尔肯 2013年8月21日
32位和64位版本的MATLAB可以使用注册相关的不同的宽度 这64位迁移页面 , 被称为是特别敏感的。
我忘记了细节,但它可能由于与遗留80位寄存器,也许是不习惯通过MATLAB的64位版本。64位浮点据说是更多 一致的 32位浮点数。你的编译器可能会或可能不会产生不同的答案取决于其实现和编译标志传递给它。
1评论
乔纳森·柯里
乔纳森·柯里 2013年8月21日
谢谢你肯我满意的解释。我知道80位寄存器,但是我认为更大宽度AVX / AVX2注册这些已经在后来的英特尔酷睿系列。卡亨教授的论文也是一个好的阅读关于这一主题的(尽管很过时的): http://www.cs.berkeley.edu/ ~ wkahan / MxMulEps.pdf
也,我是使用默认浮点国旗(精确的)在vc++中描述下面的文章: http://msdn.microsoft.com/en-us/library/aa289157 (v = vs.71) . aspx
我可以推测Matlab及其数值库使用相同的(或等效英特尔c++旗帜)?

登录置评。

类别

找到更多的在数据类型转换帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!