なんか面白い数字の進法ってないもんかなぁ、と考えていた。
機械が2、8、16進数だけってのに腹が立って、任意数進の変換プログラム組んだわけだけど。
そもそも、何進数にする、ってのが普通過ぎて面白くないよな、と思った。
その道の人は2進数での計算なんて暗算でやってのけるし、
その考えで行けば、どの進数でも同じ事だもんな。
だったら、それぞれの桁ごとに進数変えれば面白いんじゃね? って思った。
なんつーか、暗号チックな意味合いも持つし。
入力の数字から進数パターンを作ってしまえば、数学的にも面白い。
と、思ったが。
それは間違いなのだった。
例えば、2桁を用意する。
左は16進数、右は10進数とすると、13はどう表すのか。
左桁は16未満なので0、右桁は…、表現不能。
逆に右から3とし、左に繰り上げると、16+3=19、表現できてない。
∴左進数が右進数より大きいとダメ。
さらに、左を10進、右を16進として、26を考えると。
左は10が2つだから2、右は残りの6で、26と書ける。
逆、右は26-16=10なのでA、左は繰り上げ1で、1A=10+10=20、無理。
最初のも16進繰り上げと考えると、2×16+6=38とかなる。
ちゃんと読みとれない、∴右が左より大きいとダメ。
∴左進数=右進数。
つまり、全部同じ進数でないとちゃんと表現できないんですわ。 やられた。
なので、別のアプローチ。
アラビア数字は0~9の10個しかないから、16進数になると足りないわけですよ。
だから、10=A、11=B、…、としたわけですけど。
そもそも、どうして、足りないのは10から上だ、と思ったんだ?
表現できてないのは他にもあるわけですよ。
そう、マイナス。
1部の桁だけマイナスがつく、なんて状態を表現できてないんですよ。
仮に、-1=Aとしましょうか。 それで11進数を考える。
1 = 1
2 = 2
3 = 3
:
9 = 9
10 = 1A
11 = 10
:
108 = 99
109 = 1AA
110 = 1A0
:
119 = 1A9
120 = 10A
121 = 100
と順調に表現可能。
さらに凄い所は、
-1 = A
-2 = A9
-3 = A8
:
-11 = A0
-12 = AA
-13 = A99
:
-23 = A9A
とまぁ、何とマイナスも平気で表現できてしまうのだった。
符号ビットが要らない、ちょっとこれ、革命ちゃう?
(いや、先頭にAが付くので、11進の桁変え以外は必要ビット数は同じ…)
どうよ、この剰余類の代表元の取り方によらない事からの発想。
何がそこまでさせるのか、そうか、天邪鬼の血か。
そんなにルールに従うのが嫌いなのか、いや、ルールの穴を探すのが好きなんだ。
負補填進数法と名づけよう!
誰か偉い人、負補填進数法、どっかに採用してください。