基数の変更による小数の性質の変化:有限小数と循環小数の転換

こんにちは。ゆうせいです。

数値の表現形式である基数(底)を変更すると、ある基数では有限桁で収まる小数が、別の基数では無限に続く循環小数に変化することがあります。これは、分数を小数に展開する際、分母の素因数が基数の素因数に含まれているかどうかによって決定されるためです。

有限小数が循環小数になる例(10進数から2進数)

コンピュータの世界で最も頻繁に発生するのが、10進数では有限小数である数値が、2進数では循環小数に変化するケースです。

0.1(10進数)の場合

10進数の0.1は、分数で表すと1/10です。10の素因数は2と5ですが、2進数の基数である2の素因数は2のみです。

分母に含まれる「5」という素因数を2進数では割り切ることができないため、0.1を2進数に変換すると以下の通り無限に循環します。

0.0001100110011...(0011が繰り返される)

これにより、プログラミングにおいて0.1を単純に加算し続けると、内部的な打ち切り誤差が蓄積される原因となります。

循環小数が有限小数になる例(10進数から3進数や6進数)

逆に、10進数では循環してしまう小数が、基数を変えることでスッキリとした有限小数に収まるケースもあります。

1/3(3進数への変換)

10進数において1/3は 0.3333... と無限に続く循環小数です。これは、10進数の基数(10=2×5)の中に、分母の素因数である「3」が含まれていないためです。

しかし、基数を3とする3進数で表現すると、1/3は 0.1 となり、わずか1桁の有限小数で表現できます。

1/6(6進数や12進数への変換)

10進数において1/6は 0.1666... と循環しますが、基数が6(素因数2と3)や12(素因数2と3)の体系では、分母の6を割り切ることができるため、有限小数として扱うことが可能です。

性質を決定づける数学的法則

ある既約分数(これ以上約分できない分数)を n 進法で表したとき、それが有限小数になるかどうかは、分母の素因数分解の結果によって決まります。

有限小数になる条件

分母を素因数分解したときに現れるすべての素因数が、基数 n の素因数のリストに含まれている場合、その小数は有限小数となります。

循環小数になる条件

分母の素因数の中に、基数 n の素因数に含まれないものが一つでも存在する場合、その小数は必ず循環小数となります。

基数変換によるメリットとデメリット

エンジニアが特定の基数やデータ形式を選択する際には、以下の事実を考慮する必要があります。

精度管理における利点

計算対象となる数値の分母が既知である場合(例:3の倍数が多い計算など)、適切な基数や内部表現を選択することで、理論上の計算誤差を完全に排除できる可能性があります。

処理コストの欠点

10進数を正確に扱うために2進数以外の形式(BCD: 2進化10進数など)を採用すると、CPUのネイティブな浮動小数点演算ユニット(FPU)を効率的に利用できず、計算速度が低下する傾向があります。

学習のステップ

数値表現の柔軟性を理解するために、以下の手順で検討を行ってください。

  1. 10進数の「0.2」や「0.8」が、2進数において有限小数になるか循環小数になるか、分母の素因数に注目して判定してください。
  2. 16進数がプログラミングで多用される理由の一つとして、2進数との親和性(有限小数の性質が維持される点)を考察してください。
  3. 非常に大きな分母を持つ計算が必要な場合、小数表現ではなく「分子と分母をペアで保持する」有理数型(Rational型)のライブラリがあることを調査してください。

基数による表現の変化を理解することで、なぜ特定の計算で誤差が出るのかという問いに対して、数学的な根拠を持って回答できるようになります。

セイ・コンサルティング・グループでは新人エンジニア研修のアシスタント講師を募集しています。

投稿者プロフィール

山崎講師
山崎講師代表取締役
セイ・コンサルティング・グループ株式会社代表取締役。
岐阜県出身。
2000年創業、2004年会社設立。
IT企業向け人材育成研修歴業界歴20年以上。
すべての無駄を省いた費用対効果の高い「筋肉質」な研修を提供します!
この記事に間違い等ありましたらぜひお知らせください。

学生時代は趣味と実益を兼ねてリゾートバイトにいそしむ。長野県白馬村に始まり、志賀高原でのスキーインストラクター、沖縄石垣島、北海道トマム。高じてオーストラリアのゴールドコーストでツアーガイドなど。現在は野菜作りにはまっている。