1

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 とまったく同じことを大声で叫ぶのはなぜですか?

4

2 に答える 2