NEON int32转换为float会产生错误的结果

时间:2017-12-12 12:04:26

标签: floating-point type-conversion arm inline-assembly neon

在NEON内联汇编中,从Signed int32转换为Float后,数字不同。

enter image description here

这里打印出Float和Signed int32的输出: enter image description here

它随机不同(不仅是每个偶数)。在save和sint32之间只有转换(没有任何其他操作)。

如何避免它?感谢

3 个答案:

答案 0 :(得分:3)

Float只有23位分配给尾数,有一个单独的符号位(MSB)

因此,在-2 ^ 24~2 ^ 24-1窗口之外的任何int32将在转换期间失去精度。 (发生截断)

这不是ARM / NEON特有的。

https://en.wikipedia.org/wiki/Single-precision_floating-point_format

答案 1 :(得分:1)

单精度浮点数的有效数(分数部分)仅为24位。 (显式存储了23位; 1是从指数和有效数据组合推断的。)因此,必须舍入值大于2 24 的整数以适合浮点格式。

答案 2 :(得分:1)

解决使用NEON指令转换为64位int然后转换为64位浮点数。