「自然な計算のできるサイズ」らしいんですが、正直定義が曖昧で……という気になります。
『週刊「RSAを作る」』の時代、1985年前後でもZ80なんかはHLレジスタを使えば16ビットでの計算はできたわけで、じゃあZ80は16ビットCPUかというと違うよな、と。
レジスタペアを考えないのなら、まあ、うん……かなあ……?
などと自分のバカにはまり込んでいる私はいったん脇に置くとしましょう。
さて、今回の多倍長整数、一体何をしているのかと言うと、この「自然な計算のできるサイズ」を超えるための処理です。
今作のターゲットは8088/8086/V20/V30あたりのCPUです。いわゆる16ビットCPUですね。
これらのCPUでは四則演算は16ビット幅まで。それ以上の機能の提供はありません。
10進数で言うと4桁までの数字なら確実に、5桁だと符号有り無しによりますが、符号なしなら6割カバー、です。……意外と狭いな。
それ以上の数を扱うにはちょっとした工夫が必要です。
小学生の算数で、最初は一桁の計算を覚えますが、だんだん桁を増やしていきますね。
これと同じことをCPUの計算でもやります。
16ビットCPUでは一回の計算は16ビット幅まで、でした。これを一桁とみなして拡張していきます。
桁上りするのは65536。16進数で書くなら0x10000というキリのいい数値です。
小学生の筆算と同じことをあとはやるだけ。
下から足して桁上り、下から引いて借りる。掛け算も各桁で処理して足していく。
あ、除算だけはそのまま実装しないですね。ビット処理で高速化してます。
ビットシフト処理もある種掛け算でその後大小関係を見ているので割り算の筆算と似たようなもの……か? どうなんだ……?
結局自分のバカに自分ではまる解説回、でした。