• ベストアンサー

fortranの整数と実数

fortranに関する質問です. 型宣言を下のように行った上で,計算を行うと dが110ではなく,109と出力されるのですが,なぜでしょうか. dも実数で宣言しておくと110.0000と表示されます. こうなる理由と解決策をぜひお教えください. real a,b,c integer d a=33.0 b=3.0 c=0.1 d = (a/b)/c write(*,*) d

質問者が選んだベストアンサー

  • ベストアンサー
  • nag0720
  • ベストアンサー率58% (1093/1860)
回答No.1

fortranの経験ははるか昔のことなので、一般的な知識として回答します。 おそらく、実数値を整数型に代入するときに小数点以下が切り捨てられるためだと思います。 コンピュータ上の数値表現は2進数ですから、「C=0.1」と代入しても、正確に0.1を保持することでできません。 0.5や0.25はそのままの数値をもつことができますが、0.1は2進数にすると循環小数になるので。 (a/b)/cの計算は、(a/b)までは問題ないですが、/cのときに、109.99999のような数値になったのでしょう。 解決策は、結果が必ず整数になるような計算式だったら、最後に0.00001を足してから整数型に代入するという方法があります。

hammn
質問者

お礼

ご回答ありがとうございます! やはりその辺が問題なのですね... 最後に0.00001を足す方法というのは一般的なのでしょうか? コードだけ見ると若干奇妙な処理に見えるのですが. 組み込み関数などで何か良い解決策があれば良いのですが.

その他の回答 (1)

  • f272
  • ベストアンサー率46% (8469/18131)
回答No.2

組み込み関数ならNINTを使うとか... でも結果が必ず整数になるような計算式だったら、最後に0.5を足してからintで切り捨てるのはごく普通の考えですよ。

hammn
質問者

お礼

答えが整数値だとわかっている場合はNINTは良いですね! また計算結果に何かしらを足して切り捨てるのも 一般的だとわかって助かりました! ありがとうございました!!

関連するQ&A