64ビットシステムで+-infを取得するには、次のコードを使用しました
double precision, parameter :: pinf = transfer(z'7FF0000000000000',1d0) ! 64 bit
double precision, parameter :: ninf = transfer(z'FFF0000000000000',1d0) ! 64 bit
そしてそれはうまくいきます。
32 ビットでは、ninf の場合のみ (!) コンパイル エラーが発生します。
double precision, parameter :: ninf = transfer(z'FFF0000000000000',1d0
1
Error: Integer too big for integer kind 8 at (1)
割り当て ninf = -pinf
は役に立たず、コンパイルにつながります算術オーバーフローエラー:
double precision, parameter :: ninf = -pinf
1
Error: Arithmetic overflow at (1)
ieee_arithmetic モジュールについては知っていますが、gcc はそれを処理しません。
定数を正/負の無限大に設定するマルチアーキテクチャの方法はありますか?
Gfortran オプションを更新-fno-range-check
すると、エラーが抑制され、そのコードが正常にコンパイルされます。
それは重要ではありませんが、それでも私は興味深いです。gfortran が +Infinity の一定の定義を許可しているのに、-Infinity とまったく同じことを大声で叫ぶのはなぜですか?