ITパスポート 2012年 秋期 問66
問題文
2進数に変換したとき、有限小数で表現できる10進数はどれか。
選択肢
ア:0.1
イ:0.2
ウ:0.4
エ:0.5(正解)
🔒 解説は解答すると表示されます
2進数に変換したとき、有限小数で表現できる10進数はどれか。【ITパスポート 解説】
正解の理由
理由を簡単に言うと、"有限小数になるか" は分母の素因数に依ります。10進小数を分数で表し、約分して分母が2だけのべき乗()になれば、2進数(binary:0と1で表す記法)では有限小数になります。
0.5 = 1/2 は分母が なので、2進数では 0.1(有限)となり条件を満たします。
一方、0.1, 0.2, 0.4 は最簡分数にすると分母に 5 が含まれるため、2進数では無限に続く循環小数になります。
0.5 = 1/2 は分母が なので、2進数では 0.1(有限)となり条件を満たします。
一方、0.1, 0.2, 0.4 は最簡分数にすると分母に 5 が含まれるため、2進数では無限に続く循環小数になります。
解法ステップ
- 与えられた小数を分数に直す(分子と分母で表す)。
例:0.1 = 1/10, 0.2 = 2/10 = 1/5, 0.4 = 4/10 = 2/5, 0.5 = 5/10 = 1/2。 - 分数を既約分数(これ以上約分できない形)にする。
上の例では 1/10 → 1/10、1/5、2/5、1/2。 - 分母を素因数分解する。
- 分母に含まれる素数が「2だけ」であれば、2進数で有限小数になる。
- それ以外(5など)が含まれていると、2進数では無限小数(循環)になる。
- または、実際に「小数部分×2」を繰り返して整数部分を並べる方法(乗算法)で確かめる:
- 例:0.5 × 2 = 1.0 → 小数部分が0になったので有限(結果 0.1₂)。
- 例:0.1 × 2 = 0.2 → 0, 次に 0.2 × 2 = 0.4 → 0, 0.4 × 2 = 0.8 → 0, 0.8 × 2 = 1.6 → 1, 0.6 × 2 = 1.2 → 1, 0.2 に戻る… と循環する。
選択肢別の誤答解説
- ア: 0.1
0.1 = 1/10。既約にすると分母に 5 が含まれる(10 = 2×5)。2進数では循環小数になります(例:0.000110011…₂)。 - イ: 0.2
0.2 = 1/5。分母に 5 が含まれるため、2進数では循環になります(例:0.00110011…₂)。 - ウ: 0.4
0.4 = 2/5。分母に 5 が含まれるため、2進数では循環になります(例:0.0110011…₂)。 - エ: エ 0.5 — 正解
0.5 = 1/2。分母は のみなので、2進数では有限小数(0.1₂)になります。
よくある誤解
- 「10進で有限小数なら2進でも有限小数」
→ 間違いです。10進で終わる小数(例:0.1や0.4)でも、2進では循環することが多いです。どの素因数が分母にあるかが鍵です。 - 「小数の見た目(0.25なら短い)で判断してしまう」
→ 見た目では判断できません。必ず既約分数にして分母の素因数を確認してください。 - 「乗算法で途中で同じ値が出たら終わりと思い込む」
→ 途中で同じ小数部分が出たらそこから周期が始まります(循環)。小数部分が0にならない限り有限とは言えません。
補足コラム
- 一般のルール(覚え方)
- 基数(base)b の表現で有限小数になるのは、既約分数の分母の素因数が b の素因数に含まれる場合だけです。
- 例:base 10 の場合は素因数 2 と 5 が許される(だから 0.125 = 1/8 は有限、0.2 = 1/5 も有限)。
- base 2 の場合は素因数は 2 のみなので、分母は の形のみが有限になります(例:1/2, 1/4, 3/8 など)。
- 実用例:コンピュータは内部で2進数を使います。0.1(10進)をそのまま正確に表せないのは、この素因数の違いが原因です。
簡単なプログラム(Python)で確認できます:
def is_finite_in_binary(x, max_iter=50):
# x は 0<x<1 の十進小数(floatではなく分数が望ましい)
frac = x
for _ in range(max_iter):
frac *= 2
if abs(frac - round(frac)) < 1e-12:
return True
frac -= int(frac)
return False
print(is_finite_in_binary(0.5)) # True
print(is_finite_in_binary(0.1)) # False (iter上限で判定)
FAQ
Q1: どうやって素因数を確かめればいいですか?
A1: 小数を分数にして(分母は10のべき)、約分します。約分後の分母を2で割り続けて1になればOK。途中で奇数(5など)が残れば有限でないと判断できます。
A1: 小数を分数にして(分母は10のべき)、約分します。約分後の分母を2で割り続けて1になればOK。途中で奇数(5など)が残れば有限でないと判断できます。
Q2: 0.25(0.25 = 1/4)はどうですか?
A2: 1/4 の分母は なので、2進数で有限(0.01₂)です。
A2: 1/4 の分母は なので、2進数で有限(0.01₂)です。
Q3: コンピュータ計算で0.1が正確でないと何が困るの?
A3: 浮動小数点(コンピュータの実数表現)では誤差が生じます。金融計算などで丸めや誤差対策が必要になります。
A3: 浮動小数点(コンピュータの実数表現)では誤差が生じます。金融計算などで丸めや誤差対策が必要になります。
関連キーワード: 2進数, 基数変換, 有限小数, 分数の約分, 小数の循環, バイナリ表現, 浮動小数点, 素因数分解

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

