変更要約: 初版
1.1数値表現と情報理論
コンピュータ内部での2進数・16進数表現と基数変換、負数を表す補数、実数を表す浮動小数点数とそこで生じる誤差(丸め誤差・桁落ち・情報落ち)、そして情報の量を測る情報量と符号化の基礎を学びます。
コンピュータは内部で全てのデータを2進数(0と1の並び)として扱います。基本情報技術者試験の科目Bで擬似言語を読み書きするにも、科目Aで性能や誤差を論じるにも、まず「数値がどう表現され、どこで誤差が生まれるか」を正しく理解しておく必要があります。この節では暗記ではなく、実務でなぜその表現が使われるのかという視点で数値表現を掘り下げます。
1.1.12進数・16進数と基数変換
- 2進数=0と1のみで数値を表す記数法。コンピュータの回路がオン/オフの2状態で動作するため、内部表現の基本となる。
- 16進数=0〜9とA〜Fの16種類の記号で表す記数法。2進数4桁がちょうど16進数1桁に対応するため、2進数を人間が読みやすく圧縮した表記としてメモリアドレスやカラーコードなどで多用される。
- 基数変換の実務コツ=2進数→16進数は下位桁から4桁ずつ区切って各組を16進1桁に変換する。例:
1011 1100→BC→0xBC。10進数↔2進数は除算・剰余の繰り返し(10進→2進)や桁の重み付け(2進→10進)で求める。
1.1.2補数による負数表現
- 補数=ある数を基準値から引いた差として表す数。コンピュータは減算を加算回路だけで実現するために負数を補数で表現する。
- 2進数では2の補数が標準。求め方=各ビットを反転(1の補数)してから +1 する。例:8ビットで
5=00000101、1の補数11111010、2の補数(-5)=11111011。 - 2の補数表現の利点=
0の表現が1通りだけになり、加算回路がそのまま減算にも使える。nビットの2の補数で表せる範囲は-2^(n-1)〜2^(n-1)-1。
1.1.3浮動小数点数と誤差
- 浮動小数点数=実数を「符号・指数部・仮数部」の組で表す方式(IEEE 754が代表)。広い範囲の値を限られたビット数で近似的に表現できるが、全ての実数を正確には表せない。
- 丸め誤差=表現しきれない桁を四捨五入等で切り捨てることで生じる誤差。桁落ち=絶対値がほぼ等しい2つの数を引き算した結果、有効桁数が大きく減る誤差。情報落ち=絶対値が大きく異なる数を加減算した際、小さい方の値が丸められて消えてしまう誤差。
「2の補数=ビット反転して+1」「桁落み=近い値同士の引き算で有効桁が減る」「情報落ち=大きさの違う値の加減算で小さい方が消える」の対応関係が最頻出です。用語を単独で覚えるのではなく、どんな演算でどちらの誤差が起きるかをセットで押さえましょう。
ある会計システムで「2つのほぼ等しい大きな売上金額の差額」を計算するバッチ処理を実装する場面を考えます。開発者が浮動小数点型でこの差分を計算したところ、期待した差額と微妙にずれた結果が出ました。これは桁落ちが原因である可能性が高い状況です——絶対値がほぼ等しい2つの数を引き算すると、上位の桁が打ち消し合って有効桁数が急激に減り、下位桁の丸め誤差が相対的に拡大されて表に出てくるためです。対策として、金額のような厳密な精度が求められる値は浮動小数点ではなく整数型(最小単位=円やセントで管理)や固定小数点で扱う、あるいは桁落ちが起きにくい計算順序に組み替える、といった設計判断が必要になります。一方、負数の内部表現について考えると、8ビット符号付き整数で -5 を求めたいとき、5(00000101)の各ビットを反転して 11111010(1の補数)とし、そこに 1 を加えて 11111011(2の補数)が -5 の表現になります。検算として 00000101 + 11111011 を2進加算すると、9ビット目の桁上げを無視して 00000000 になり、5 + (-5) = 0 が正しく成立していることが確認できます。このように、補数表現は「引き算を足し算のハードウェアだけで実現する」という実務的な要請から生まれた仕組みであり、浮動小数点の誤差は「有限のビット数で無限の実数を近似する」という制約から必然的に生じる現象です。
| 誤差の種類 | 発生条件 | 対策の方向性 |
|---|---|---|
| 丸め誤差 | 表現できない桁を四捨五入等で切り捨てる | 整数/固定小数点の利用、精度要件の明確化 |
| 桁落ち | 絶対値がほぼ等しい2数の減算 | 計算順序の見直し、差分を直接求める式変形 |
| 情報落ち | 絶対値が大きく異なる数の加減算 | 小さい値をまとめて後から加算する等の工夫 |
ひっかけ: 「浮動小数点数はビット数を増やせば必ず全ての実数を正確に表現できる」は誤りです。ビット数を増やせば精度は向上しますが、実数は連続無限の集合であるため有限ビットでは原理的に全てを正確表現できません。また「2の補数はビット反転だけで求まる」も誤り=反転してさらに+1するのが2の補数です(反転だけは1の補数)。
1.1.4情報量と符号化
- 情報量=ある事象が起きたことを知ったときの「驚きの度合い」を数値化したもの。発生確率が低い事象ほど情報量が大きい。単位はビット(bit)で、
log2(1/p)で求める(p=発生確率)。 - 例:2つの等確率な結果(コイン投げ)の情報量は
log2(1/0.5) = 1ビット。8択で等確率ならlog2(8) = 3ビットとなり、選択肢が多い(=意外性が高い)ほど情報量は増える。 - 符号化=情報をビット列など別の形式に変換すること。文字コード(例:Unicode/UTF-8)、圧縮符号化(頻度の高い記号ほど短い符号を割り当てるハフマン符号化 等)が代表例。
1.1.5この節のまとめ
- 2の補数=ビット反転して+1。負数表現により減算を加算回路だけで実現できる
- 浮動小数点の誤差=丸め誤差/桁落ち(近い値の引き算)/情報落ち(大きさの違う値の加減算)を区別する
- 情報量=
log2(1/p)ビット(発生確率が低いほど大きい)。符号化はそれをビット列等に変換する仕組み
進捗の記録にはログインが必要です。
理解度チェック
(軽い確認用)Q1. 会計バッチ処理で、絶対値がほぼ等しい2つの大きな金額を浮動小数点数で減算したところ、期待値と微妙にずれた結果になった。最も可能性の高い原因はどれか。
Q2. 8ビット符号付き整数で `5`(`00000101`)から `-5` の2の補数表現を求める手順として正しいものはどれか。
Q3. 発生確率が1/8である事象が起きたことを知ったときの情報量として正しいものはどれか。

