戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

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進数では無限に続く循環小数になります。

解法ステップ

  1. 与えられた小数を分数に直す(分子と分母で表す)。
    例:0.1 = 1/10, 0.2 = 2/10 = 1/5, 0.4 = 4/10 = 2/5, 0.5 = 5/10 = 1/2。
  2. 分数を既約分数(これ以上約分できない形)にする。
    上の例では 1/10 → 1/10、1/5、2/5、1/2。
  3. 分母を素因数分解する。
    • 分母に含まれる素数が「2だけ」であれば、2進数で有限小数になる。
    • それ以外(5など)が含まれていると、2進数では無限小数(循環)になる。
  4. または、実際に「小数部分×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₂)になります。

よくある誤解

  1. 「10進で有限小数なら2進でも有限小数」
    → 間違いです。10進で終わる小数(例:0.1や0.4)でも、2進では循環することが多いです。どの素因数が分母にあるかが鍵です。
  2. 「小数の見た目(0.25なら短い)で判断してしまう」
    → 見た目では判断できません。必ず既約分数にして分母の素因数を確認してください。
  3. 「乗算法で途中で同じ値が出たら終わりと思い込む」
    → 途中で同じ小数部分が出たらそこから周期が始まります(循環)。小数部分が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など)が残れば有限でないと判断できます。
Q2: 0.25(0.25 = 1/4)はどうですか?
A2: 1/4 の分母は なので、2進数で有限(0.01₂)です。
Q3: コンピュータ計算で0.1が正確でないと何が困るの?
A3: 浮動小数点(コンピュータの実数表現)では誤差が生じます。金融計算などで丸めや誤差対策が必要になります。

関連キーワード: 2進数, 基数変換, 有限小数, 分数の約分, 小数の循環, バイナリ表現, 浮動小数点, 素因数分解
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について