WebAssembly:(f32.const nan:0x200000)表示0x7fa00000或0x7fe00000
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WebAssembly:(f32.const nan:0x200000)表示0x7fa00000或0x7fe00000相关的知识,希望对你有一定的参考价值。
在C中,strtof("nan(0x200000)", nullptr)
表示为0x7fe00000
。但在WebAssembly spec interpreter tests:
(assert_return (invoke "f32.reinterpret_i32" (i32.const 0x7fa00000)) (f32.const nan:0x200000))
(assert_return (invoke "f32.reinterpret_i32" (i32.const 0xffa00000)) (f32.const -nan:0x200000))
那么,在WebAssembly中,nan(0x200000)
(或nan:0x200000
)应该表示为0x7fa00000
,或者它是一个错误?
为什么在C中它的实现方式不同?
同样的问题为f64.const
。
答案
在C中,strtof(“nan(0x200000)”,nullptr)表示为0x7fe00000
这不一定是这样。 C中NaN的额外信息的行为是实现定义的。
值0x7fa00000和0x7fe00000之间的差异是前者是信号NaN,而后者是安静的NaN。看起来你的C实现选择将NaN表示为安静的NaN,因此有效值的最重要位被设置,而给定的有效负载用于剩余的位。
WebAssembly允许您指定所有有效位,包括最重要的位。您可以使用至少canonN的常量值创建“算术NaN”(其最高有效位设置为安静的NaN),对于32位浮点,该值为0x400000。因此,您可以通过指定0x600000的有效负载来创建0x7fe00000的表示。
以上是关于WebAssembly:(f32.const nan:0x200000)表示0x7fa00000或0x7fe00000的主要内容,如果未能解决你的问题,请参考以下文章