位取り記数法

提供: testwiki
ナビゲーションに移動 検索に移動

テンプレート:Redirect テンプレート:出典の明記 テンプレート:読み仮名とは、いくつかの数字を並べて数を表す方法である(例:テンプレート:Mathテンプレート:Mathテンプレート:Math)。

数字ないし決まった文字数の数字列の置かれた位置をテンプレート:読み仮名またはテンプレート:読み仮名テンプレート:Efn2と呼び[1]、数字の位を決めることを位取りという。

一つの桁を テンプレート:Mvar 種の数字列の組み合わせで表す位取り記数法をテンプレート:読み仮名あるいは単に テンプレート:読み仮名テンプレート:Efn2と呼ぶ。また、数 テンプレート:Mvarテンプレート:読み仮名テンプレート:Efn2ないしテンプレート:読み仮名と呼ぶ。 例えば、一般的に用いられる 0 から 9 までのアラビア数字による記数法は十進法にあたる。十進法でない例として、時刻角度を表す単位六十進法が使われている。またコンピュータの分野においては数値表現に二進法とその派生である八進法十六進法がしばしば用いられる。

位取り記数法は古代中国に由来する。中国では紀元前14世紀の商時代にすでに十進法が用いられており、紀元前4世紀にはゼロを空位として記述する位取り記数法を用いていた。対してヨーロッパにおける最古の十進法が記述された文書は976年のスペインの手稿本である[2]

本項では テンプレート:Mvar が 2 以上の整数の場合を扱う。それ以外の場合については広義の記数法の記事を参照のこと。また後述する[[#p進数|テンプレート:Mvar 進数]]の概念とは(関連があるものの)別概念であるので注意が必要である。

記法

テンプレート:See also テンプレート:Math 以上の整数 テンプレート:Mvar を底(基数)とする位取り記数法(テンプレート:Mvar 進法)において、それぞれの位の値は テンプレート:Math から テンプレート:Math までの テンプレート:Mvar 個の非負の整数に対応した数字で表される(例:テンプレート:Math2テンプレート:Math2テンプレート:Sfn[3]。 非負の数は位取り記数法によって、以下のように表される[3]

dm1d1d0integer part.radix pointd1d2fractional part.

ここで テンプレート:Math は位の値テンプレート:Sfnを表し、添字 テンプレート:Mvar はここでは テンプレート:Mvarテンプレート:Efn2の位の冪指数を表す。添字 テンプレート:Mvar が 0 以上の位の値の並びは整数を表し整数部テンプレート:Lang-en-short)と呼ばれる。添字 テンプレート:Mvarテンプレート:Math 以下の位の値の並びは小数部テンプレート:Lang-en-short)と呼ばれる。整数部と小数部は小数点テンプレート:Efn2テンプレート:Lang-en-short)によって区切られる(例:テンプレート:Math)。もし位取り記数法で表される数が整数ならば、小数点は書かなくともよい(例:テンプレート:Math)。テンプレート:Mvar は整数部の桁数を表す。小数部について、テンプレート:Math の位はそれぞれ順に小数第一位、第二位、……と呼ばれるテンプレート:Sfn

また負の数は負符号(−)を数字列の前方につけて表すテンプレート:Sfn[4](例:テンプレート:Mathテンプレート:Math):

dm1d1d0.d1d2.

位取り記数法による数の表示は、底の冪 テンプレート:Mvar とその位の値 テンプレート:Mvarの略記と見なせる:

dm1d1d0.d1d2=km1dkNk.

ここで右辺の和の記号は以下を表す:

km1dkNk=dm1Nm1++d1N+d0+d1N1+.

例えば、十進法における テンプレート:Math は、

123.45=1102+2101+3100+4101+5102=100+20+3+410+5100

と展開できる。

小数部の位の値は有限個の場合もあれば、そうでない場合もある。テンプレート:Mvar 進法で循環小数となるような有理数や、無理数は有限の桁数では表せないため、末尾に省略記号(…)を付けて有限桁でないことを示す(例:円周率 テンプレート:Pi の十進展開 テンプレート:Math)。

循環小数について、以下のように、循環節テンプレート:Lang-en-short)を上線などによって示す記法も用いられる(以下では上線を用いる)[5]

dm1d1d0.d1d2drd(r+λ1)repetend

ここで テンプレート:Mvar は循環節の長さを表し、テンプレート:Mvar は循環節が始まる位を示す。例えば十進法において テンプレート:Mathテンプレート:Math と表される。

慣習的に、特に断りのない限り、位取り記数法で示された数は十進数と解釈される。異なる底を用いていることを示すため、以下のように底を併記することがある:

dm1d1d0.d1d2d(N),

または底を括弧で囲わず、

dm1d1d0.d1d2dN,

あるいは数を括弧書きして、

(dm1d1d0.d1d2d)N.

上記の記法において、底の数自体は十進法で表記される。例えば、テンプレート:Math二進数であり、十進数 テンプレート:Math に等しい数を表す。また テンプレート:Math 十六進数であり、十進数 テンプレート:Math に等しい数を表す。

その他の記法として、コンピュータ・プログラミングにおいて、プログラミング言語によっては、定まった数を表す構文リテラル)が用意されている。例えばC言語C++において、123 は十進法、0x012abc および 0X345DEF は十六進法、0b0101 および 0B1010 は二進法、0123八進法定数をそれぞれ表し、底の区別は先頭の記号によってなされる(0 以外の数字で始まるなら十進数、0x または 0X で始まるなら十六進数、0b または 0B で始まるなら二進数、それ以外は八進数と解釈されるテンプレート:Efn2[6][7]JavaScriptなどでは八進数についてより厳格に、0o または 0O で始まる文法を採用している[8]。より柔軟な記法として、2から36までの底についてテンプレート:Efn2Smalltalkでは base "r" value(例:16rFFEF[9]Erlangでは base "#" value(例:16#ffef[10]という構文を採用している。base は底を表す十進整数であり、value はその進数法での数値を表す英数字の列である。

適用例

十進法

テンプレート:See also

数列

十進法は最も身近な位取り記数法である。十進法では、個の数字を用い、一桁にひとつの数字を容れて必要な桁数分を並べて数値を表す。

アラビア数字なら テンプレート:Quote の十個であり、 漢数字なら テンプレート:Quote の十個である。以下、アラビア数字を例に説明するが、漢数字の場合も同様である。

十進法ではこれらの数字を列べる事で数を表現する。 例えば、312.02は、 テンプレート:Indent を表す。

Nが十未満

例えば五進法をアラビア数字で表した場合、使う数字は

テンプレート:Quote

の五種類の記号であり、五進法における431.02は、

テンプレート:Indent

を表し、これは十進法の116.08にあたる。

注意すべき点は、同じ「431.02」でも五進法のものと十進法のものでは値が異なる。このため、位取り記数法の話をするときには、常に何進法の話であるのかを明示する必要がある。(後述

Nが十を超過

十二進法十六進法二十進法のように、N が十より大きい場合は用いる数字は、アラビア数字だけでは足りなくなる。そこで、十以上の数を表記する「数字」として、ラテン文字アルファベット大文字を用いる事が多い。

例えば十六進法であれば、「数字」として

テンプレート:Quote

を用い、ABCDEFはそれぞれ十進法の自然数10、11、12、13、14、15に対応する。

従って例えば2F3.A7

テンプレート:Indent

を表し、これは十進法の755.652344にあたる。

テンプレート:See also 有理数小数で表す際、有限小数になる場合と循環小数になる場合がある。本節では底 テンプレート:Mvar の位取り記数法で有理数が有限小数として表される(分子が分母で「割り切れる」)条件について述べる。

一般に、既約分数 テンプレート:Math が底 テンプレート:Mvar の位取り記数法において有限小数として表されるには、分母 テンプレート:Mvar が底 テンプレート:Mvar が持つ素因数 p1,,pm の積 y=p1k1pmkm (ただし テンプレート:Mvarテンプレート:Math 以上の整数)になっていなければならない(さもなくば テンプレート:Mvarを掛けて整数にならない)テンプレート:Sfn[11]。この条件は分子によらないため、有限小数で表せるかは単位分数で表される有理数に限って調べればよい。

例えば十進法では テンプレート:Math のため、ある有理数を既約分数で表した際、分母が テンプレート:Mathテンプレート:Math 以外に素因数を持たない場合には有限小数となり、それ以外は循環小数となる。

テンプレート:Mvar 進有限小数が テンプレート:Mvar 進有限小数でもあるには、その有限小数を既約分数で現した際の分母が2つの底 テンプレート:Mvar, テンプレート:Mvar の冪のいずれの約数にもなる必要がある。特に、すべての テンプレート:Mvar 進有限小数が テンプレート:Mvar 進有限小数であるには テンプレート:Mvar の素因数がすべて テンプレート:Mvar の素因数に含まれていなければならない。

表記の一意性

この節では特に断りがない限り十進数について述べるが、他の底についても同様である。

実数の N 進表記は一意ではない。

よく知られているように、

1=1.000…=0.999…

である。また、以下のように、上位桁に不要な0を付け加えることもできる。

0013=13

通常は「0013」のような表記は許さないとする事が多いが、コンピューターなどでは、最大で4桁の整数値であることを示すため、あえて「0013」のような表記をする場合がある。

以上のような例を除くと0以外の実数は一意に表現できる。

しかし、0のみは

+0」、「-0

の二通りの表記が可能である(いわゆる負のゼロの問題)。これが原因で、コンピューター・プログラムでは0のみ例外処理を求められる場合がある。

また、一般には0は1桁の数とされているが、ルールを優先し1桁の数と認めない場合もある(覆面算#ルール)。

表計算ソフトの列名などで用いられている、A, B, ..., Z, AA, AB, ... のような形式は、位取り記数法の一種と考えることができ、かつ0より大きい整数を一意に表せる。(en:Bijective numeration)

底の変換アルゴリズム

与えられた非負整数 T を、記号𝔠0,,𝔠N1を数字として用いた N 進表記

テンプレート:Indent

で表すには、以下のアルゴリズムを用いればよい。

なお、このアルゴリズムは、 MNによりM 進表記されている TN 進表記に書き換えるときに使われる事が多いので、このアルゴリズムを底の変換アルゴリズムと呼ぶ。

  • 入力T を受け取る。
  • T=0 なら𝔠0 を出力して停止。
  • iを0に初期化
  • while(T≠0){
    • TN で割った商を T' 、余りを k とし、 ai𝔠k とする。
    • TT'、i←i+1
  • }
  • r←i-1
  • ara0を出力

なお、T >0に対しては等式

テンプレート:Indent

が知られている(なお、添え字を0から始めているので、T の桁数はr +1) 。ここでx床関数である。

底の変換例

十進法→五進法への変換

十進法の 5213 を五進法に置き換える場合、5で割っていき、商が5未満になった時点で止める。余り無しの場合は 0 を明記する。商が5未満になったら、最後の商を先頭にして、最初の余りを末尾にして列べる。

  • 5213 ÷ 5 = 1042 余り 3
  • 1042 ÷ 5 = 208 余り 2
  • 208 ÷ 5 = 41 余り 3
  • 41 ÷ 5 = 8 余り 1
  • 8 ÷ 5 = 1 余り 3
  • 1 ÷ 5 = 0 余り 1

から、5213 = 3 + 2 × 5 + 3 × 52 + 1 × 53 + 3 × 54 + 1 × 55 となるので、五進表記では 131323 と表すことができる。また、55 = 3125, 56 = 15625 であるから、55 ≤ 5213 < 56 が成り立っているので、対数を取ると テンプレート:Indent となり、 テンプレート:Indent が分かる。

十進法以外→十進法以外への変換

十進法以外のN進法も同様で、例えば3テンプレート:Supに当たる六進法の 50213 を十六進法に置き換える場合も、商が24テンプレート:Sub = 10テンプレート:Sub を下回るまで24で割っていく。

  • 50213 ÷ 24 = 1522 余り 1
  • 1522 ÷ 24 = 41 余り 14
  • 42 ÷ 24 = 1 余り 13

以上より、1, 13, 14, 1の列になり、13テンプレート:Sub = 9テンプレート:Sub、14テンプレート:Sub = Aテンプレート:Sub なので、十六進法では 19A1 となる。

同値の小数への変換

小数を別のN進法に変換する場合には、以下の経過を践む。

  1. 変換前と変換後の冪数を列挙する。
  2. 小数点以下の元の桁数に合わせて、冪数を掛ける。
  3. 端数処理をする。
  4. 整数と同じく、冪数を掛けた結果を、変換後のNで割っていく。
  5. 変換後のNで割った結果を最後の商→最初の余りの順に列挙する。この列が同値の小数となる。

(例)十進数0.531441 → 十二進数六桁

  1. 十進数 1000000 → 2985984(十の六乗→十二の六乗)
  2. 531441×2.985984 = 1586874.322944
  3. 1586874.322944 → 1586874
  4. 1586874÷12 = 132239 余り6
    • 132239÷12 = 11019 余り11
    • 11019÷12 = 918 余り3
    • 918÷12 = 76 余り6
    • 76÷12 = 6 余り4
  5. 11テンプレート:Sub = Bテンプレート:Sub なので、6463B6テンプレート:Sub を列べる。

以上より、十進数0.531441 は、十二進数では約0.6463B6 となる。

(例)十進数0.124053 → 六進数九桁

  1. 十進数 1000000 → 10077696(十の六乗→六の九乗)
  2. 124053×10.077696 = 1250168.42189
    • 変換前の小数が六桁なので、乗数も小数点以下を六桁にする。
  3. 1250168.42189 → 1250168
  4. 1250168÷6 = 208361 余り2
    • 208361÷6 = 34726 余り5
    • 34726÷6 = 5787 余り4
    • 5787÷6 = 964 余り3
    • 964÷6 = 160 余り4
    • 160÷6 = 26 余り4
    • 26÷6 = 4 余り2
  5. 42443452テンプレート:Subを列べる。分母が 10077696テンプレート:Sub = 1000000000テンプレート:Sub なので、小数点以下は9桁になり、先頭に0が1つ加わる。

よって、十進数0.124053 は、六進数では約0.042443452 となる。

テンプレート:See also 十進法では、機械的に倍、倍、倍、一万倍…の順で増える。同じく、十二進法では、機械的に十二倍、百四十四倍、千七百二十八倍、二万七百三十六倍…の順で増える。

しかし、底を2つに分ける場合がある。十進法に対して、二・五進法(十が五進命数法で「二五」なので、区別するため二と五の間に点が必要)ではの2つの底があるので、桁が上がる度に五倍→二倍→五倍→二倍…と交互になり、「十の冪数」と「十の冪数の五倍」が交互に現れる。これはそろばんと同じく一桁が「一の位」4つと「五の位」1つで構成される方法だが、計算機にも応用されている。

時間

六十進法六十進法二十四進法七進法

六十進法六十進法二十四進法三十進法十二進法十進法十年紀十進法世紀十進法千年紀

バビロニア六十進法もそろばんに似た方法で、一桁が「一の位」9つと「十の位」5つで構成されており、整数は十倍→倍→十倍→六倍と交互になり、小数は六分の一十分の一→六分の一→十分の一と交互になる。この方法では、整数第二位は「六十の位」と「六百の位」に分かれ、整数第三位は「三千六百の位」と「三万六千の位」に分かれ、小数第一位は「六分の一の位」と「六十分の一の位」に分かれ、小数第二位は「三百六十分の一の位」と「三千六百分の一の位」に分かれている。

階乗進法

これら二・五進法や六十進法のように複数の底が設定されている場合には、" : " などの区切り符号を付ける。例えば、六十進法で十進法を補助とする場合には、58 → 59 → 1:00 → 1:01 → 1:02 …の順に数列が進む。

日本の通貨(硬貨と紙幣)には、昇順で一円→五円→十円→五十円→百円→五百円→千円→五千円→一万円があるので、通貨を一つの単位と見れば、これは前述の二・五進法である。この配列を見ると、一(100)、十(101)、百(102)、千(103)、一万(104)が十の冪数であり、五、五十、五百、五千が「十の冪数の五倍」である。

英語表記

テンプレート:See also

「底 N 」を英語で、base N という。特定のNに関しては倍数接頭辞を基に名称がついているが、名称の付け方は不規則である。通常、接尾辞が -ary である語は、ラテン語の -arius (~の、~に関する) に由来して、「N 個一組」「N を単位とする」「N 個から成る」を意味する語である。一方、接尾辞が -imal である語は、ラテン語の -imus に由来して、「第 N」「N 分の一」を意味する語である。

以下は「底 N 」、もしくはより明解に「N 個一組」「N を単位とする」「N 個から成る」という意味の形容詞である。

テンプレート:Div col

  • :binary
  • :ternary
  • :quaternary
  • :quinary
  • :senary
  • :septenary
  • :octonary, octal
  • :nonary
  • :denary, decimal
  • 十二:duodenary, duodecimal
  • 十五:quindenary, quindecimal, pentadecimal
  • 十六:sedenary, sedecimal, hexadecimal
  • 十八:octodenary, octodecimal
  • 二十:vicenary, vigesimal
  • 二十四:tetravicenary, tetravigesimal
  • 三十:tricenary, trigesimal
  • 三十二:duoreicenary, duoreigesimal
  • 三十六:hexatrecenary, hexatrigesimal
  • 六十:sexagenary, sexagesimal

テンプレート:Div col end

これらを使い、a base-two numberで「二進数」、the base-two numeral systemで「二進法」を表す名詞となる。 同様にa binary numberthe binary numeral systemでもそれぞれ「二進数」、「二進法」を表す名詞となる。他の底も同様。

p進数

テンプレート:Main N 進表記と関連が深い概念として、素数 p 毎に定まる p 進数というものもある。 名称は本稿で解説しているN 進表記の別名であるN 進数と同一であるものの、別概念ではある。ただし両者は非常に関連があり、整数の p進表記を(可算)無限桁の自然数の範囲に拡張したものが p進整数で、さらにそこに有限桁の小数部分を許したものが p進数である。ただし「無限桁の整数」(の一部は有理数として再解釈できるもののほとんど)は本稿で扱う普通の数(実数)とは異なる。

注釈

テンプレート:脚注ヘルプ テンプレート:Notelist2

出典

テンプレート:脚注ヘルプ テンプレート:Reflist

参考文献

関連項目

テンプレート:Wikiversity

総合
通常のN進法
特殊なN進法
その他