2021-07-30 (金)
熱は下がった.とても身体がだるい.
JavaScriptの実行環境によってFloat64Arrayに入ったNaN値を読み書きすると,バッファ内の値が変わってしまうのが気になったのでjsのNaNの扱いを見ていた.
おそらく,NaN Boxing のために常にpayloadビットをクリアしているのだろうけど,Chrome(というかV8)はNaNのpayloadを維持したまま演算できる.
https://tc39.es/ecma262/#sec-ecmascript-language-types-number-type
NaNはJavaScript内では互いに区別できない値という以外,実際のNaN値のビット列がどう扱われるかは実装依存っぽい.むしろChromeが頑張りすぎに見える.
ほとんど問題にならないだろうけど,自前で NaN Boxing するような処理系をJavaScriptで実装しようとしたり,NaNにエラーコードをエンコードして入れてるようなハードウェアやライブラリを呼び出す場合には気をつけたほうが良さそう.