ペイロード付きのNaNを使用しています(つまり、仮数部に重要な情報が含まれていますが、引き続きNaNとして扱われます)。例えば、そのような値の1つは、符号ビットが1であるFFF8000055550001
としてのIEEE-754-1985、NaN /無限大については7FF
の指数、(ほとんどのアーキテクチャでは)静かなNaNビットセット、およびペイロードは0x55550001
です。Cペイロード付きダブルリテラルNaN
しかし、これにはいくつかの問題があります。ダブルスのため
- 進リテラルの表記(最良の選択肢、hereを参照してください)だけに思える:まず、これはすべてのリテラルを初期化するために使用することはできません一般的な方法以来、C/C++でのリテラルとして簡単に作成することができませんそれはエイリアシングを回避しますが、関数呼び出し を必要とするサポート
memcpy
がいいですreinterpret_cast
はC++のみです(大丈夫です)が、変数やポインタではなくリテラル- 組合型-punningするオペランドが必要ですが、私は
p1024
と
p-1024
を使用して
inf
Sを得ることができますが、仮数部は、この場合には無視されます)
があり、これは一定の静-時間を初期化するために使用することができないと思いますペイロードを持つNaNの静的定数を設定する方法はありますか?システムはIEEE-754-1985に準拠しており、long
とdouble
は同じエンディアンであると仮定してもよい。
私はあなたがこの目的のために[ユニオン](https://stackoverflow.com/q/2148989/995714)を使用することができますね –