スカラーINTEGERを作成してサブルーチンに渡すと、その値が浮動小数点に変換されていて、ひどく不正確です。たとえば、s = 2に設定し、print_my_intを呼び出してコンソールに出力する場所(、)は、2.80259693E-45という値が表示されます。他のスカラー整数もs = 0の場合を除いて同様に振る舞います。この場合、出力は0.0000000です。しかし、これはまだ間違っています。なぜなら、整数は明らかに小数と仮数を表示してはならないからです。これは出力形式の問題ではありません。ローカルに表示されたときに他の整数が正しく表示されるようになるためです。Help! FORTRAN整数を渡すと、不正確な浮動小数点数に変換されますか?
ここで何が起こっているかについての手掛かりはありますか?引数のデータ型をサブルーチン定義に強制する必要がありますか?これもできますか?
コード例:
PROGRAM print_int
INTEGER s
s = 2
CALL print_my_int(s)
END PROGRAM print_int
SUBROUTINE print_my_int(x)
WRITE(*,*) x
END SUBROUTINE print_my_int
結果の出力:
2.80259693E-45
FORTRANに変数名の最初の文字に基づいた型推論があるので、パラメータ名を 'x'から' i'または 'j'に変更した場合もうまくいきます。しかし、それをしないでください---悪い習慣です。 – JasonFruit
ありがとうございます。便利なヒントですが、医療過誤を避けるために気をつけています。 –
宣言されていない変数に対してコンパイラチョークを作成したい場合は、すべてのプログラム/サブルーチンの先頭に "implicit none"ステートメントを使用することをお勧めします。 – steabert