2017-12-24 57 views
0

として表されるstrtof("nan(0x200000)", nullptr)のCでは、しかしWebAssembly spec interpreter testsに:WebAssembly nan(0x200000)(またはnan:0x200000)中のSOWebAssembly:(f32.const nan:0x200000)は、0x7fa00000または0x7fe00000を意味します。

(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)) 

は、0x7fa00000として表現されなければならない、またはそれは誤りですか?

なぜC言語で実装されているのですか?

f64.constと同じ質問です。 Cにおいて

+1

C標準では浮動小数点形式が必須ではないため、NaNを指定する必要はありません。 –

答えて

3

、strtofは( "ナン(0x200000番地)"、nullptr)これは必ずしもそうではない0x7fe00000

として表します。 C言語でのNaNの追加情報の動作は、実装定義されています。

値0x7fa00000と0x7fe00000の違いは、前者がシグナリングNaNであり、後者が静かなNaNであることです。 C実装はNaNを静かなNaNとして表現するように選択したので、仮数部の最上位ビットが設定され、残りのビットには指定されたペイロードが使用されます。

WebAssemblyでは、最も重要なビットを含むすべての有効ビットを指定できます。 32ビット浮動小数点の場合、0x400000である、少なくともキャノン Nの定数値を使用して、 "算術NaN"(静かなNaNのように設定された最上位ビットを持つ)を作成できます。したがって、0x600000のペイロードを指定することによって、0x7fe00000の表現を作成することができます。

関連する問題