2011-01-18 5 views
2

をアンダーフローIは、以下のプログラムを使用してガンマ(-170.1)を計算したいと思います:結果は、その種

program arithmetic 
! program to do a calculation 
real(8) :: x 
x = GAMMA(-170.1) 
print *, x 
end program 

が、私はエラーを取得:私はのgfortranでコンパイルするとき

test.f95:4.10:

x = GAMMA(-170.1) 1 Error: Result of GAMMA underflows its kind at (1)

を。私が定義したように、Maple gamma(-170.1)= 5.191963205 * 10 ^( - 172)によると、これは変数xの指数の範囲内でなければならないと思います。

答えて

1

-170.0は、フロートとして扱うことができます。もしそうなら、それを2倍に変更すれば問題は解決します。

5

プログラムの以下の変更が有効です。 Fortranでは、LHSに割り当てられる前にRHSが評価され、浮動小数点リテラルはデフォルトの種類、つまり単精度であることに注意してください。したがって、GAMMAの引数を倍精度にすると、コンパイラは倍精度GAMMAを選択します。

 

program arithmetic 
! program to do a calculation 
integer, parameter :: dp = kind(1.0d0) 
real(dp) :: x 
x = GAMMA(-170.1_dp) 
print *, x 
end program 
 
+0

あなたは答えが便利考慮する場合も –

+1

@dhackの作品のおかげで、受諾および/またはそれをupvotingご検討ください。ここのユーザーは、受け入れ率が0%のユーザーを嫌う傾向があります。 :) – janneb

関連する問題