在 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
同样的问题。
最佳答案
In C, strtof("nan(0x200000)", nullptr) represented as 0x7fe00000
不一定如此。 C 中 NaN 的额外信息的行为是实现定义的。
值 0x7fa00000 和 0x7fe00000 之间的区别在于前者是一个信号 NaN,而后者是一个安静的 NaN。看起来您的 C 实现选择将 NaN 表示为安静的 NaN,因此设置了有效数字的最高有效位,而给定的有效负载用于其余位。
WebAssembly允许您指定所有有效位,包括最高有效位。您可以使用至少为 canonN 的常量值(对于 32 位 float 为 0x400000)来创建“算术 NaN”(其最高有效位设置为安静的 NaN)。因此,您可以通过指定 0x600000 的有效负载来创建 0x7fe00000 的表示。
关于c - WebAssembly:(f32.const nan:0x200000) 表示 0x7fa00000 或 0x7fe00000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47961537/