我有一段运算浮点数的NEON代码,原来是aarch32的NEON。
现在要将代码移植到64bit平台上,所以我用aarch64的NEON将这段代码进行了重写。
这个重写只是把每条指令换成了aarch64对应的写法,原来的算法没有任何改变,
我认为算出的结果不应该有任何误差,但实际上有误差,请问这种情况正常吗?
我有一段运算浮点数的NEON代码,原来是aarch32的NEON。
现在要将代码移植到64bit平台上,所以我用aarch64的NEON将这段代码进行了重写。
这个重写只是把每条指令换成了aarch64对应的写法,原来的算法没有任何改变,
我认为算出的结果不应该有任何误差,但实际上有误差,请问这种情况正常吗?
正常的。
对于浮点数标准IEEE754,aarch32和aarch64的NEON对double类型的支持是不一样的。比如AArch32对denormalized数(很小的浮点数)直接是算成0的(Flush to zero),但是aarch64不是(IEEE754标准也不是)。具体可以参考ARMv8的reference manual A1.5。