計算機算術

10進数の0.1を2進数の浮動小数点数で表したときの説明として正しいものはどれか。

  1. A2進数でも0.1ちょうどで表せるので、誤差は生じない
  2. B2進数では無限に続く小数になるため、丸めた近い値で表すことになる
  3. C2進数で表すと、元の値よりちょうど10倍大きな値になる
答えと解説を見る

正解:B. 2進数では無限に続く小数になるため、丸めた近い値で表すことになる

10進数の0.1は、2進数にすると0.000110011001100…と0011が無限にくり返す小数になります。浮動小数点では仮数の桁数が限られているので、途中で丸めた近い値しか記録できず、わずかな誤差が生じます。分母が2の累乗でない分数は、どれも2進数で有限の桁では表せません。一方、0.5や0.25のように分母が2の累乗の数は正確に表せます。値が10倍になるような変換は起こりません。

  • A. 0.1は2進数では有限の桁で表せません。
  • B. 正しい。無限に続く2進小数になり、丸めた値になります。
  • C. 値が10倍になるような変換は起こりません。
この分野を解く 分野ページへ

計算機算術のほかの問題

  1. 多くのプログラミング言語で、倍精度の 0.1 + 0.2 == 0.3 という比較が偽になる理由として正しいものはどれか。
  2. IEEE 754の単精度のマシンイプシロン(1と、1の次に大きい表せる数との差)はいくらか。
  3. 単精度と倍精度の浮動小数点数で信頼できる10進数の有効桁数の目安の組み合わせとして正しいものはどれか。
  4. IEEE 754の非正規化数(サブノーマル数)の役割として正しいものはどれか。
  5. 非正規化数を多く含む計算で、一部のプロセッサでは処理が大きく遅くなることがある。そのため性能を優先する場面で使われる設定はどれか。