数学A / 整数の性質
n進法の変換(整数と小数)
問題
次の変換をせよ。
(1) 進法で表された を 進法で表せ。
(2) 進法の小数 を、 進法の分数で表せ。
ヒントを見る
(1)は各桁に位の重み()をかけて足す。(2)小数の各位は右へいくほど と小さくなる。それをかけて足す。
解答・解説
方針
整数部分は位の重みを左へ大きくして()かけて足す。小数部分は位の重みを右へ小さくして()かけて足す。
解答
⓪ 発想 — どう考え始めるか。 進法の数は「位の重み」の約束ごとにすぎない。整数部分は右から ( 進法なら)、小数部分は左から ( 進法なら)。
各桁に重みをかけて足すだけで、 進法に戻る。
小数側の重みが「割る」方向に進むことだけが新しい。整数と小数で、重みの進む向きが逆になる対称性を意識しておくと迷わない。
(1) 進法の位の重みは、右から 。 は右から なので
(2) 小数点以下の位の重みは、左から 。 は小数第1位から なので
(整数部分は重みが左へ大きく、小数部分は右へ小さくなる — 対称的だ。)
発展 — 一歩先へ。 「左から巻き込む」計算は、多項式の値を速く求めるホーナー法(組立除法の親戚)と同じものだ。 進法の数は「 を変数とみた多項式に を代入した値」なので、多項式の道具がそのまま使える。
進法はコンピュータの、 進法はカラーコード(#FF6600 など)の言葉だ。位取り記数法の原理が分かっていれば、何進法が来ても同じ2つの向き(重みの表・巻き込み)で処理できる。
(1) (2)
別解
(1)は、重みの表を作らずに「左から巻き込む」計算もできる。
先頭の桁から順に、「今までの値を 倍して、次の桁を足す」を繰り返すのだ。
桁を1つ読むたびに全体が「1桁分だけ左へずれる= 倍される」ので、この巻き込みで重みが自動的に付く。桁数が多いときは、大きなべき乗()を書かずに済むのが利点だ。
(2)は、小数点を「持ち上げる」と見通しがよい。 は を で割ったもの。 だから 。整数の変換に帰着させる作戦である。
ポイント
- 整数部分:位の重みは右から
- 小数部分:位の重みは左から
- 各桁 × 重み をすべて足す
よくある間違い
- 小数の重みを でなく整数の重みで計算する
- 桁の並び(左右)と重みの対応を取り違える
- 巻き込み計算で「掛けてから足す」の順序を逆にする(足してから掛けると別の数になる)