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的主要内容,如果未能解决你的问题,请参考以下文章

Webassembly如何获取f64的指针或引用

可以使用 Webassembly 触发功能吗?

Chrome:再见 PNaCl,你好 WebAssembly

na 残

Notepad ++ 用 NA 替换空单元格空格

WebAssembly 系列JavaScript Just-in-time (JIT) 工作原理