[Fortran]単精度浮動小数点数と倍精度浮動小数点数
Fortranでは浮動小数点数(※)を扱うとき、変数へ定数を代入するときには単精度が倍精度を明示しなければならない。
例えば、倍精度浮動小数点型の変数へ代入する際、数値定数を「3.14」としただけでは単精度浮動小数点数とみなされてしまう。この場合、有効桁数は6桁程度しかない。指数部に「E」あるいは「e」を使用した場合も同じ。
高精度な数値計算を行いたくて倍精度浮動小数点数で計算を行う場合は、数値定数の指数部に「D」あるいは「d」を用いた表記を使用すること。
以下の例では、倍精度浮動小数点型の変数に代入する際、数値定数の表記による数値の取扱いの差を示したもの。指数部を「d」を使用して表記しなければ倍精度で扱われていないことがわかる。
program doublecheck
implicit none
double precision d1, d2, d3
d1 = 3.14
d2 = 3.14e0
d3 = 3.14d0
print '(f20.18)', d1
print '(f20.18)', d2
print '(f20.18)', d3
end program
出力
3.140000104904174805
3.140000104904174805
3.140000000000000124
※Fortranに関する書籍では「実数」と表記するものが多いが、これは簡便な表記であり、プログラミング言語の分野では実数を「浮動小数点数」と呼ぶことが多い。
« [R]正規分布に従う乱数を生成する | トップページ | [Fortran]組み込み関数の個別名と総称名について(dsinとsin、dabsとabsなど) »
「Fortran」カテゴリの記事
- [Fortran]文字列の前後の空白を取り除く(2023.03.05)
- [Fortran]write文で出力時に改行させない(2021.01.31)
- [Fortran]サブルーチンの引数にサブルーチンを指定する(2021.01.09)
- [GNU Fortran]ファイル(ディレクトリ)の存在を確認(2020.08.16)
- [gfortran]エラーメッセージ「Program received signal SIGSEGV: Segmentation fault - invalid memory reference.」(2020.07.20)
« [R]正規分布に従う乱数を生成する | トップページ | [Fortran]組み込み関数の個別名と総称名について(dsinとsin、dabsとabsなど) »

コメント