• ベストアンサー

froat型

int型の変数iとjに100000000を代入し、float型の変数rを宣言し、   r = (i + j + 1); を計算するとrは200000000.000000になりdouble型の変数uを宣言し、   u = (i + j + 1); を計算するとuは200000001.000000になりました。 何故そうなるのかわかりません。教えてください。

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

  • ベストアンサー
  • ultraCS
  • ベストアンサー率44% (3956/8947)
回答No.2

floatは仮数部が24ビットなので有効桁は7桁強です。 ですから、8桁より大きな隔たりのある数の加減算の場合、桁落ちが発生して、200000000には1を何度足しても200000000のままということです。 有効桁に気を遣うのは浮動小数点演算の基本なので、常に意識するようにしてください。

その他の回答 (1)

  • asuca
  • ベストアンサー率47% (11786/24626)
回答No.1

参考URLのFloat型の説明にあるようにFloatの扱える数値の上限を超えてしまったからではないかと思いますが。 Floatが扱える数値の大きさを超えてしまったために舌の部分がカットされたのでしょう。

参考URL:
http://www.kyoto-su.ac.jp/~yamada/programming/float.html#float

関連するQ&A