ITパスポート試験 / 平成24年度 秋期 ITパスポート試験 / 問66
certification-simodake-work

平成24年度 秋期 ITパスポート試験 問66 解説 10進数から2進数への変換

問66 2進数に変換したとき, 有限小数で表現できる10進数はどれか。

  1. ア 0.1
  2. イ 0.2
  3. ウ 0.4
  4. エ 0.5 ✓ 正答

解説

2進数で有限小数になる条件

10進数の小数を2進数に変換したとき、有限小数で表せるのは、その数を既約分数(これ以上約分できない分数)にした際の分母が「2の累乗(2, 4, 8, 16...)」の形になる場合のみです。選択肢のうち、分母が2の累乗になっているものを選べば正解にたどり着きます。

10進数と2進数の関係

10進数の小数を2進数で表すと、小数点以下の各桁は、左から順に 21(0.5),22(0.25),23(0.125),24(0.0625)...2^{-1} (0.5), 2^{-2} (0.25), 2^{-3} (0.125), 2^{-4} (0.0625) ... という値を足し合わせていくことになります。

つまり、2進数の有限小数は「 1/21/21/41/41/81/8 などをいくつか足し合わせた値」でなければなりません。これを分数に直すと、分母が必ず 2n2^n の形になります。逆に言えば、分母に2以外の素因数(3や5など)が含まれている場合、その数は2進数に変換すると無限に続く循環小数になってしまいます。

選択肢を分数で分析する

各選択肢を分数に直して分母を確認しましょう。

  • 0.1=1/10=1/(2×5)0.1 = 1/10 = 1 / (2 \times 5):分母に5が含まれるため循環小数になります。
  • 0.2=2/10=1/50.2 = 2/10 = 1/5:分母に5が含まれるため循環小数になります。
  • 0.4=4/10=2/50.4 = 4/10 = 2/5:分母に5が含まれるため循環小数になります。
  • 0.5=5/10=1/20.5 = 5/10 = 1/2:分母が 212^1 です。これは 2n2^n の形なので有限小数です。

このように、分母の素因数分解を確認するだけで、計算をしなくても有限小数かどうかを判定できます。

プログラミングと精度の問題

この知識は、単なる算数の問題にとどまらず、プログラミングを行う現場で非常に重要になります。コンピュータの内部では数値がすべて2進数で処理されているため、0.1のような10進数ではきれいな有限小数でも、2進数に変換すると「0.000110011...」というように無限に続いてしまいます。

そのため、プログラミング言語で 0.1+0.20.1 + 0.2 を計算させると、正確に 0.30.3 とならず、ごくわずかな誤差が発生することがあります。これを「浮動小数点数誤差」と呼びます。金融システムや科学技術計算など、正確性が求められるプログラムを組む際、プログラマはこの特性を理解し、誤差を考慮した処理や、あるいは誤差の出ないデータ型の選択を行う必要があります。この問題は、コンピュータの計算の根底にある「表現の限界」を理解するための第一歩となる重要なトピックです。

参考リンク

学習の記録にははてなブックマーク!

気づいたこと・覚えたことをコメントにメモしよう