Fortranでは、大きな倍精度浮動小数点数を最も近い整数に丸められるようにしたいと思います。私はこれを次のように試みます、
PROGRAM rounding
IMPLICIT NONE
INTEGER, PARAMETER :: DP = 8
REAL(KIND=DP) :: value
value = 12345678987.123456
print *, CEILING(value)
END PROGRAM ROUNDING
ただし、これは正解を出力しませんが、代わりにを与え-2147483648
ます。これは浮動小数点の性質と精度に関係していると思いますが、このように数値を丸めることは妥当な目標のようです。
誰かが私を正しい方向に向けることができますか?
によって返される整数変数ceiling()
は、値を含めるには小さすぎます。より大きな種類の整数を生成するようにceilingに指示する必要があります。それ以外の場合は、デフォルトの整数を使用します。
例えばによって
print *, CEILING(value, kind=dp)
(そのような種類が存在すると仮定しますが、DP
賢明に選択された場合は存在するはずです)
それkind=8
は醜くて持ち運びできないことに注意してください。などのリテラル定数は使用しないでください8
。そのような種類が存在するという保証はありません。
だから私は使用します:
INTEGER, PARAMETER :: DP = kind(1.d0)
整数の種類の場合、SELECTED_INT_KINDを使用して、次のような十分な桁数の種類を選択できます。
INTEGER, PARAMETER :: IP = SELECTED_INT_KIND(15)
print *, CEILING(value, kind=IP)
または、Fortranの他の方法を使用します:integer * 4 vs integer(4)vs integer(kind = 4)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加