3を√5進数で表すと?

吉田 安紀彦

まずは0.1を2進数で表してみる。

整数をn進数で表す方法は学校で習った通りなのですが(知らない人はごめんなさい)、小数をn進数で表すのはなぜか習わないので、その方法を考えてみました。

2進数と10進数を分けて考えます。10進数で2倍にすることは、2進数で10倍にすることに相当しま2未満なら整数部分だけ比べるなら同じなので、図1のように計算でき、このように計算した結果が下です。

\[ 0.1 = 0.000110011001100110 \cdots \] \[ 0.2 = 0.001100110011001100 \cdots \] \[ 0.3 = 0.010011001100110011 \cdots \] \[ 0.4 = 0.011001100110011001 \cdots \] \[ 0.5 = 0.1 \cdots \] \[ 0.6 = 0.100110011001100110 \cdots \] \[ 0.7 = 0.101100110011001100 \cdots \] \[ 0.8 = 0.110011001100110011 \cdots \] \[ 0.9 = 0.111001100110011001 \cdots \]

では、3を(\sqrt{5})進数で表すと?

さっきのように、まずは整数部分を\(\sqrt{5}\)進数に直してから、小数部分だけ取り出して、それを\(\sqrt{5}\)倍し、その整数部分を書いて、小数部分だけ取り出して、...ということを繰り返すことで\(\sqrt{5}\)進数が計算できます。このように計算した結果が下です。

\[ 1 = 1 \cdots \] \[ 2 = 2 \cdots \] \[ 3 = 10.1110110012001001001200011100112 \cdots \] \[ 4 = 11.1110110012001001001200011100112 \cdots \] \[ 5 = 12.1110110012001001001200011100112 \cdots \] \[ = 20.1002000002000011112010010010101 \cdots \] \[ = 100 \] \[ 6 = 21.1002000002000011112010010010101 \cdots \] \[ = 101 \] \[ 7 = 22.1002000002000011112010010010101 \cdots \] \[ = 102 \] \[ 8 = 110.1110110012001001001200011100112 \cdots \] \[ 9 = 111.1110110012001001001200011100112 \cdots \] \[ 10 = 112.1110110012001001001200011100112 \cdots \] \[ = 120.1002000002000011112010010010101 \cdots \] \[ = 201 \] \[ 12 = 122.1002000002000011112010010010101 \cdots \] \[ = 202 \] \[ = 1000.1112000112001110020011200112010 \cdots \] \[ 13 = 210.1110110012001001001200011100112 \cdots \] \[ = 1001.1112000112001110020011200112010 \cdots \] \[ 14 = 211.1110110012001001001200011100112 \cdots \] \[ = 1002.1112000112001110020011200112010 \cdots \] \[ = 1010.1011001200100100120001110011200 \cdots \] \[ 15 = 212.1110110012001001001200011100112 \cdots \] \[ = 220.1002000002000011112010010010101 \cdots \] \[ = 1011.1011001200100100120001110011200 \cdots \] \[ 16 = 221.1002000002000011112010010010101 \cdots \] \[ = 1012.1011001200100100120001110011200 \cdots \] \[ = 1020.0111100000101111000011110012000 \cdots \] \[ 100 = 111102.2000101101100001101112000000100 \cdots \] \[ = 111110.1100120010010012000111001120010 \cdots \]

ついでに ( \pi ) 進数で表してみる。

さっきと同じように \( \pi \) 進数で表してみました。

\[ 1 = 1 \cdots \] \[ 2 = 2 \cdots \] \[ 3 = 3 \cdots \] \[ 4 = 3.3011021110020221130001020002102 \cdots \] \[ = 10.2201220211211103010000101100100 \cdots \] \[ 5 = 11.2201220211211103010000101100100 \cdots \] \[ 6 = 12.2201220211211103010000101100100 \cdots \] \[ 7 = 13.2201220211211103010000101100100 \cdots \] \[ = 20.2021120021000000300201212221000 \] \[ 8 = 21.2021120021000000300201212221000 \cdots \] \[ 9 = 22.2021120021000000300201212221000 \cdots \] \[ 10 = 23.2021120021000000300201212221000 \cdots \] \[ = 30.1212011100221300120300222121221 \cdots \] \[ = 100.0102212222112112200111121020120 \] \[ 11 = 31.1212011100221300120300222121221 \cdots \] \[ = 101.0102212222112112200111121020120 \] \[ 12 = 32.1212011100221300120300222121221 \cdots \] \[ = 102.0102212222112112200111121020120 \cdots \] \[ 13 = 33.1212011100221300120300222121221 \cdots \] \[ = 103.0102212222112112200111121020120 \cdots \] \[ 14 = 110.3010011210121210203010212000221 \cdots \] \[ 15 = 111.3010011210121210203010212000221 \cdots \] \[ 16 = 112.3010011210121210203010212000221 \cdots \] \[ 100 = 2322.0023000110210220200020212220122 \cdots \] \[ = 3013.2200000230101000010102211213010 \cdots \] \[ = 3020.2012213001011221120211010101020 \cdots \] \[ = 10002.1220120100000111301021202102110 \cdots \] \[ 1000 = 232310.3001112202000200000022113003010 \cdots \] \[ = 233002.2021030001201111020020000222110 \cdots \] \[ = 302123.2110120012200220202012200030022 \cdots \] \[ = 302130.1301011023000100212120230023003 \cdots \] \[ = 302200.0122022021200120110021112220211 \cdots \] \[ = 1000322.2021202200301011202102130002020 \cdots \] \[ = 1001021.1000022221100021203001010110123 \cdots \]

(\sqrt{5})進数は使えるのか

\(\sqrt{5}\)進数では、足し算する時も上のような計算をしなくてはならないときがあります。例え ば、\(\sqrt{5}\)進数で \(1 + 2\) は、\(1+2=10.1110110012001001001200011100112 \cdots \)です。掛け算も、 \(2×3=6\) を\(\sqrt{5}\)進数で表すと、\(2×10.1110110012001001001200011100112 \cdots = \)
\( 21.1002000002000011112010010010101 \cdots = 101 \) です。2 つ以上の表し方がある上に、足し 算や掛け算もできません。なので、実用性はほぼないと思います。

おわりに

思い付きでまとめてみたのですごく短くなってしまいましたが、ここまで読んでいただいてありがとうございました。個人的には、これを思いついたとき\(\sqrt{5}\)進数ってどうなるのだと思ったのですが、複数の表し方があったり、意外な発見があって良かったと思いました。

次へライフゲームをC++で実装してみた話>
前へいったいどのくらい大きな声を出せばブラジルの人に声が届くのか>