在NEON内联汇编中,从Signed int32转换为Float后,数字不同。
它随机不同(不仅是每个偶数)。在save和sint32之间只有转换(没有任何其他操作)。
如何避免它?感谢
答案 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位浮点数。