数値をFortranからC++に転送する必要があります。これにより、C ++で読み取られたときに、numeric_limits :: quick_nan()として扱われます。Windowsの共有メモリを使用して、Fortran側でSalford / Intelコンパイラを使用し、C++でVS2010を使用しています。
どんなアイデアでも、ジェームズ
Fortran 2003標準は、とりわけ、と呼ばれる派生型の定義ieee_arithmetic
を含む組み込みモジュールを定義しています。同じモジュールは、そのタイプの名前付き定数の束も定義します。これらの名前付き定数の1つの名前はです。 ieee_class_type
ieee_quiet_nan
ieee_arithmetic
ieee_value
また、 2つの引数を取る関数を定義します。これらの最初の(それを呼び出すx
)は実数であり、2番目の(呼び出される)はなどclass
のタイプの値を取ります。そのため、関数呼び出しは、と同じタイプおよび種類のIEEEクワイエットNaNを返します。ieee_class_type
ieee_quiet_nan
ieee_value(x,ieee_quiet_nan)
x
この関数は、関数呼び出しがをieee_support_nan(x)
返す場合にのみ機能することに注意してください.true.
。Fortranプロセッサは、IEEE演算のすべての機能をサポートする必要はありません。移植性のために、使用する機能を最初に確認することをお勧めします。
したがって、FortranおよびC ++プログラムがメモリを共有している場合、次のようなFortranステートメントは
y = ieee_value(x,ieee_quiet_nan)
y
C++プログラムが静かなNaNであると理解する名前で指定された場所にビットを配置します。
編集
ウラジミールFが言うように、SalfordのFortranが不足ieee_arithmetic
している場合は、Fortranのビットをいじる機能に頼る必要があると思います。C ++で必要なビット数で整数変数を宣言し、クワイエットNaNの有効なビットパターンを調べてください。そうすれば、プレーンセーリングになります。