ラノベ×マンガで学ぶ基本情報技術者試験 2-3: 小数の表現 – 小数点以下の数をどう表す?

🌊 渓谷の変化

補数ゴブリンを倒したシンジとマナは、渓谷の奥へと進んでいた。しかし、突然、周囲の景色が変化し始めた。

空中に無数の数字が光となって漂い、小数点を含んだ数値がまるで星座のように渓谷の空を埋め尽くす。

「なんだ、ここは…?」シンジは頭上の光景に圧倒された。

マナは微笑みながら、杖を掲げる。「次の試練だよ、シンジ!ここでは、小数点以下の数をどう表現するかを学ぶの。」

彼女が杖を振ると、「3.14」や「0.75」といった小数が輝きながら空中に並び始めた。

「小数点以下って、ただ普通に数字を書けばいいんじゃないのか?」シンジは首をかしげる。

マナは「ふふっ」と笑いながら首を横に振った。「それがね、コンピュータでは少し違うの。 小数点の扱い方はいくつかあって、状況に応じて使い分けるのよ。」

📌 固定小数点表示 – 小数点を固定して扱う方法

マナは杖を振り、空中に説明を表示した。

マナ

まずは固定小数点表示から!これは、小数点の位置を固定して扱う方法なの。

マナが杖を動かすと、空中に次の変換例が浮かび上がる。

10進数の 5.25 → 2進数の 101.01

シンジは興味深そうに数字を見つめた。

シンジ

なるほど…整数部分と小数部分をそのまま変換してるんだな。

マナ

その通り!
固定小数点表示は、計算がシンプルだから扱いやすいの。
でも…

マナが杖を振ると、新たな問題が浮かび上がった。

最大値: 7.875(4ビット整数部 + 3ビット小数部)
マナ

例えば、この表現方法だと表せる範囲が決まってるの。
これを超える値を扱うと、オーバーフローが起こっちゃうのよ。

シンジ

そっか…限られた範囲しか使えないのか。

シンジは納得したように頷いた。

📌 浮動小数点表示 – 小数点を自由に動かす方法

マナ

だから、もう一つの方法があるの!

マナが杖を振ると、空中の数字が形を変え、「5.25 = 1.3125 × 2²」と表示された。

マナ

これは浮動小数点表示
小数点の位置を自由に動かせるのが特徴なんだよ。

シンジは表示された数字をじっと見つめながら、

シンジ

えっと…つまり、数を仮数部と指数部に分けて考えるってことか?

と尋ねた。

マナ

そう!
じゃあ、実際にどうやって分けるのか、具体的に見てみよう。

🔢 5.25 を浮動小数点表示にする手順

  1. まず、5.25 を 2進数に変換する
10進数 5.25 = 2進数 101.01
  1. 仮数部を作るため、小数点を移動し、1以上2未満の形にする
101.01 → 1.0101 × 2²
  • ここで「1.0101」が仮数部
  • 2²の「2」が基数(常に2)
  • 2の指数部分 は「2」
シンジ

なるほど!
小数点を動かして、先頭が『1』になるように調整するんだな。

マナ

その通り!
これなら、小数点の位置が決まっていないから、ものすごく大きな数や、ものすごく小さな数でも、効率的に表せるんだよ。

マナ

じゃあ、もう少し練習で、違う数でやってみよう!

マナが杖を振ると、新たな数式が空中に浮かび上がった。

浮動小数点で表したい数:

45.75(10進数)
マナ

これを浮動小数点で表現する方法を見ていこう!

🔢 45.75 を浮動小数点表示にする手順

① まず、10進数を2進数に変換する

45(整数部分)= 101101₂  

0.75(小数部分)= 0.11₂  

45.75(10進数)= 101101.11(2進数)

シンジ

整数部分と小数部分をそれぞれ2進数に直せばいいんだ!

シンジは納得したように頷く。

② 仮数部を作る

マナ

次に、小数点を動かして、先頭が『1』になるようにするよ!

101101.11 → 1.0110111 × 2⁵
マナ

このとき、1.0110111仮数部になるんだよ!

シンジ

なるほど!
小数点を動かして、最初の『1』の後ろに小数を持ってくるんだな!

シンジは理解し始めた。

③ 指数部を求める

マナ

小数点を右から5回動かしたから、『指数部』は5になるよ!

シンジ

つまり… 2⁵ の 5 が指数部 ってことか!

マナ

その通り!
これで、浮動小数点の形が完成したね!

🌟 45.75 の浮動小数点表現

1.0110111 × 2⁵

仮数部 = 1.0110111
指数部 = 5
基数(常に2)

シンジは腕を組みながら、改めて整理した。

シンジ

これなら、整数でも小数でも、どんな大きな数でも小さな数でも扱いやすくなるんだな!

マナ

そうなの!
指数を使うことで、小数点の位置を柔軟に動かせるから、とっても便利なんだよ!
次に小さい数の表しかたも見ておこう

🔬 小さな数も表せる!

マナ

例えば、0.003125 を浮動小数点にするとどうなると思う?

シンジ

うーん、さっきと同じように、小数点を動かすんだよな?

マナ

そう!やってみよう。

  1. 0.003125 を 2進数に変換
0.003125 = 0.000011
  1. 小数点を移動し、1以上2未満の形にする
0.000011 → 1.1 × 2⁻⁸
マナ

つまり、0.003125 は 1.1 × 2⁻⁸ って表せるんだ!

シンジは腕を組みながら考え込んだ。

シンジ

なるほどな…
小数点の位置をずらして、指数で調整するから、すごく大きい数も、小さい数も表せるわけか。

マナ

その通り!
だから浮動小数点は、科学技術計算や、グラフィック処理なんかでよく使われるんだよ。

シンジ

なるほど…
これなら、もっと広い範囲の数を扱えそうだな!

マナ

そうなの!
でもその代わりに、計算が少し複雑になるのがデメリットね。

マナは比較表を表示しながら説明を続けた。

表現方法メリットデメリット
固定小数点計算が簡単で高速表現できる範囲が限られる
浮動小数点幅広い数値を扱える計算が複雑で誤差が生じる
マナ

状況に応じて、どっちを使うか選ぶのが大事なんだよ!

シンジは腕を組みながら考え込んだ。

シンジ

うーん、どっちも一長一短ってわけか…。

⚠️ 渓谷の試練: 無限小数の迷宮

シンジがマナの説明を理解し始めたその時――谷全体が突然、光の波に包まれた。

シンジ

うわっ!?
なんだ…!?

シンジが驚いて足を止めると、空間のあちこちに数字の光が絡み合いながら流れ出し、まるで迷路のように空間を埋め尽くしていく。

シンジ

こ、これは…!?

谷の奥に広がったのは、無限に続く小数が織りなす光の迷宮だった。光る数字が絶えず変化しながら道を遮り、まるで出口を見つけさせまいとしているかのようだ。

マナは慎重に一歩踏み出しながら、

マナ

ここは『無限小数の迷宮』…無限に続く数の概念を理解しないと、先へ進めない試練だよ!

とシンジに説明した。

シンジ

無限小数…?

シンジは目を細め、迷宮に輝く数字の流れを見つめる。

マナ

そう。
例えば『1 ÷ 3』を計算すると、結果はどうなる?

🔢 シンジの挑戦: 無限小数と有限小数

マナが杖を振ると、空中に光る数字が浮かび上がった。

マナ

10進数で表すとこうなるよ!

1 ÷ 3 = 0.333...(小数点以下が永遠に続く)
マナ

つまり、これは無限小数なんだ。

シンジ

確かに…どこまで計算しても終わらないな。

シンジは数字をじっと見つめた。

マナ

それを2進数で表してみると?

1 ÷ 3 = 0.010101...(2進数でも無限に続く)
シンジ

うわ、2進数でも終わらないのか…!

シンジは驚きを隠せなかった。

マナ

そう。
コンピュータはメモリが有限だから、どこかで打ち切るしかないの。
でも、その切り捨てが原因で、『丸め誤差』が生まれることがあるんだよ。

シンジ

なるほど、だからコンピュータで計算すると、正確な値をそのまま扱えないことがあるのか…。

シンジは迷宮の光る数字を見つめながら、少しずつ理解を深めていく。

マナ

そういうこと!

マナは微笑み、

マナ

さあ、この迷宮を抜けるには、この仕組みを使いこなさなきゃいけないよ!

と、シンジに試練の突破を促した。

🌟 試練を突破する方法

シンジは迷宮に輝く無数の小数を見つめ、どう進めばいいのか戸惑っていた。光の数字が絶えず揺れ動き、まるで彼の行く手を阻むかのように道を封じている。

シンジ

これじゃあ、どこが正しい道なのかわからない…。

そんなシンジの不安を察したように、マナが優しく声をかけた。

マナ

大丈夫、シンジ!この迷宮は無限小数の扱い方を理解すれば抜け出せるようになってるの。さっきの『1 ÷ 3』の話を思い出して!

シンジ

1 ÷ 3…?

マナ

そう!
このままだと『0.3333…』って無限に続くけど、コンピュータではこのまま扱うことはできないでしょ?

マナは杖を振り、空中に数字を浮かび上がらせた。

💡 無限小数を固定小数点で近似する方法

マナ

例えば、『1/3』を4桁の固定小数点で表すなら、近似値にして扱うんだよ。

🔹 10進数での近似

1 ÷ 3 ≈ 0.3333(4桁で丸める)

🔹 2進数での近似

1 ÷ 3 = 0.010101...(無限小数)
→ 0.0101(4ビットに丸める)

シンジははっと気づいた。

シンジ

そっか!
コンピュータは限られた桁数しか扱えないから、適当なところで打ち切るんだな!

マナ

そういうこと!
この『丸める』処理を使えば、無限に続く数でもコンピュータが扱える形に変えられるの。

マナはシンジを見つめ、励ますように微笑んだ。

マナ

シンジ、この方法を使って、迷宮の光を正しい形に整えてみて!

シンジ

よし、やってみる!

シンジは意を決し、光り輝く数字の迷宮に手をかざした。

シンジ

無限に続く小数を、近似値にして整理する…つまり…0.010101… → 0.0101!

シンジが声を上げた瞬間、彼の手元から光が放たれ、迷宮の数字が次々と整っていく。

まるで道が再構築されるように、無限小数の光が薄れ、新たな通路が開かれていく。

シンジ

やった…!

マナ

すごいよ、シンジ!
ちゃんと無限小数を理解して、正しく処理できたね!

シンジ

これで、この迷宮も突破できる!

二人は顔を見合わせ、大きく頷いた。迷宮の先には、新たな試練が待ち受けているが、シンジの足取りはもう迷いがなかった。

⚔ 試練の最終関門 – 無限小数ビーストの出現!

迷宮の光が薄れ、道が開かれたかと思ったその瞬間――

ズズズズ…

渓谷全体が震え、突如として光の粒が渦を巻くように集まり始めた。やがて、それらは巨大な姿へと変貌し、禍々しい数字のオーラを纏う怪物となった。

シンジ

な、なんだこいつは!?

シンジが後ずさる。

マナ

これは…『無限小数ビースト』…!

マナの表情が険しくなる。

マナ

こいつは、無限に続く小数の象徴みたいな存在よ!

無限小数ビーストの体には、「0.3333…」「0.010101…」「1.414213…」といった果てしなく続く数が浮かび上がり、形を変えながら渦巻いている。

「お前は、この終わりなき数の世界に囚われるがいい…!」

ビーストの咆哮とともに、光の数字が無数の刃となってシンジに襲いかかる!

🔢 シンジの挑戦 – 無限小数を打ち切れ!

【第1問】2進数の無限小数の丸め

問題:
「1 ÷ 3 を2進数で表すと、『0.010101…』と無限に続く。
これを4ビットで打ち切るとどうなる?

🔽 選択肢:

  1. 0.0100
  2. 0.0101
  3. 0.0110

解答

「どうする、シンジ!?」マナが叫ぶ。

「…無限に続くってことは、繰り返しのパターンがあるんだよな…。4ビットなら、このパターンの途中まで切り取る感じか…!」

シンジは考えた末、「 0.0101!」と叫んだ。

正解!

ビーストの体が小さく震え、一部が崩れた。

「な…!?」

「よし!無限に続く小数も、適切な桁数で打ち切れば近似できる!」

【第2問】2進数の平方根の近似

問題:
「2進数で √2(1.414213…)を近似する場合、
4ビットで丸めるとどうなる?

🔽 選択肢:

  1. 1.0100
  2. 1.0110
  3. 1.1000

解答

「平方根の近似も、無限小数と同じように扱う…ってことは、途中で区切るってことか!」

シンジは慎重に数値を確かめ、「1.0100!」と答えた。

正解!

ビーストの体がさらに崩れ、光の粒が渓谷に散らばった。

「ぐぬぬ…!」

【第3問】2進数で 5/8 を正確に表せ!

問題:
「分数『5/8』を2進数で正確に表すと、どれになる?」

🔽 選択肢:

  1. 0.101
  2. 0.110
  3. 0.111

解答

「これなら、ちょうど8の倍数の分母だから、有限小数になるはずだ!」

シンジは確信を持って、「0.101!」と答えた。

正解!

ビーストの体が大きく揺れ始めた。

「バ…バカな!無限の力が…有限に…!」

光の数字が弾け飛び、ビーストは消滅していった。

🎖 スキル獲得!

「すごいよ、シンジ!」マナが喜びの声を上げた。

シンジの手のひらが青く光り、そこに新たな紋章が浮かび上がる。

シンジは『小数コード解読』のスキルを習得した!

シンジは拳を握りしめ、満足そうに頷いた。「これで、無限小数の扱いもバッチリだ!」

「さぁ、次の試練へ進もう!」

二人は、新たな冒険へと足を踏み出した。