整数を英語で表現する3(巨大な数)
前回はthousand, million, billionの次は何かという話題で終わらせました。 この3桁区切りの単位さえわかれば、無限に数を表現できることになります。 どうも、この単位を求める方法は決まっておらず、色々あるようです。 本投稿では、 The Conway-Wechsler System という方法について説明していきます。
【注意】今回の内容はThe Conway-Wechsler Systemそのものなので、 英語がわかる人は下記ページを見た方が正確です。
The Conway-Wechsler System
http://www.mrob.com/pub/math/largenum.html#conway-wechsler
Wikipediaではまた違った方法で説明しているようです。 本投稿では説明するつもりはないですが興味がある方はどうぞ。
Names of large numbers
https://en.wikipedia.org/wiki/Names_of_large_numbers
それでは単位を求めて行きます。 まずは対象となる数が、何番目の単位に該当するのかを求めます。 数が10の何乗かを求めます。 10なら1、10,000なら4になります。
求めた数から3を引きます。 1,000なら3-3=0、1,000,000,000なら9-3=6です。
引いた数を3で割り、商と余りを求めます。 もし余りが0ならoneから、1ならtenから、2ならone hundredから始まることになります。 求めた商が重要であり、解説ではNと表現されていました。
もし商Nが10未満の場合は、下記の表によって決定されます。
商N | 英語 |
---|---|
0 | thousand |
1 | million |
2 | billion |
3 | trillion |
4 | quadrillion |
5 | quintillion |
6 | sextillion |
7 | septillion |
8 | octillion |
9 | nonillion |
商Nが10以上の場合は、 商Nの一の位、十の位、百の位の数の組み合わせによって文字列を求めます。 ひとまずは商Nが10~999までの場合を考慮しましょう。 ちなみに商Nが999というのは、元の数が3000桁の場合となります。
組み合わせの表を示します。
商N | 1の位 | 10の位 | 100の位 |
---|---|---|---|
0 | - | - | - |
1 | un | (n) deci | (nx) centi |
2 | duo | (ms) viginti | (n) ducenti |
3 | tre (*) | (ns) triginta | (ns) trecenti |
4 | quattuor | (ns) quadraginta | (ns) quadringenti |
5 | quin | (ns) quinquaginta | (ns) quingenti |
6 | se (sx) | (n) sexaginta | (n) sescenti |
7 | septe (mn) | (n) septuaginta | (n) septingenti |
8 | octo | (mx) octoginta | (mx) octingenti |
9 | nove (mn) | nonaginta | nongenti |
表より商Nの一の位、十の位、百の位の文字をつなげて文字列を作ります。
ただし()
が隣り合っている場合は、カッコ内の文字が等しいときにその文字を入れます。
例えば
septe(mn) + (ms)viginti = septemviginti
この例では、(mn)
と(ms)
でどちらにもm
が含まれているため、
文字m
を二つの単語の間に入れました。
他には
se(sx) + (mx)octoginta = sexoctoginta
カッコが連結しているのは一の位と十の位、あとは一の位と百の位であり、 十の位と百の位ではカッコが隣り合っていないので注意。
特別な場合として、一の位のtre(*)
があります。
これは、隣り合っているカッコにs
かx
が含まれている場合には、
文字s
を入れます。
例えば
tre(*) + (mx)octingenti = tresoctingenti
この例では、(*)
と(mx)
が隣り合っており、文字にx
があるため、
文字x
ではなく文字s
を挿入しています。
求めた英単語の最後の母音を削除します。
母音はa,i,u,e,o
であり、例えば次のようになります。
tresoctingenti → tresoctingent
英単語の最後に文字illion
をつけます。
例えば下記の通り。
tresoctingent → tresoctingentillion
完成です。
例を挙げます。
値 | 英語 |
---|---|
10の261乗 | sexoctogintillion |
10の2421乗 | sexoctingentillion |
10の309乗 | duocentillion |
10の603乗 | ducentillion |
10の312乗 | trescentillion |
10の903乗 | trecentillion |
以上で、商Nが0~999まで説明はしました。 では商Nが999が超えた場合を説明します。
まずは商Nを3桁区切りにします。 例えば求めた商Nが987654321であった場合は、
987,654,321
となります。考え方としては、
987 illi 654 illi 321 illion
のように、文字を少し変えて横に直列でつなぐことで求めます。 それぞれ3桁の単位を求めると次のようになります。
987 septemoctogintanongentillion 654 quattuorquinquagintasescentillion 321 unvigintitrecentillion
321以外の単語の最後についている「on」削除します。
987 septemoctogintanongentilli ★on削除 654 quattuorquinquagintasescentilli ★on削除 321 unvigintitrecentillion
単語をつなげます。
septemoctogintanongentilliquattuorquinquagintasescentilliunvigintitrecentllion
非常に長いが完成です。 あまりに長すぎるようにも思えますが、そもそも商Nが987654321という場合は 元々の数の桁数が2962962966であり、30億個近くも数値が連なる場合なので 単位もここまで長くなってしまうのです。
このアルゴリズムでは、単位が必ずillion
で終わることが前提となっているのですが、
たった一つだけ、商Nが0の時はthousand
なのでillion
で終わりません。
そこでthousand
ではなく、nillion
という表記で代用します。
例を挙げます。
1000 millinillion (million + thousand) 1001 millimillion 1002 millibillion 1003 millitrillion 1013 millitredecillion 1234 milliquattuortrigintaducentillion 6560 sextillisexagintaquingentillion 19683 novendecillitresoctogintasescentillion 1000000 millinillinillion
以上で説明は終わりですが、注意点をいくつか。 このアルゴリズムは絶対ではなく、方言が色々あるようです。 基本的な考え方はラテン語をベースとしているようで、 ラテン語にとって自然な場合はこっちだろうということで、 人によって色んな考え方があるようです。
解説しているリンク先では詳しく説明されていますが、 例えば
The Conway-Wechsler Systemでは quinquadecillion, sedecillion, and novendecillion だが、 quindecillion, sexdecillion and novemdecillion としてよく知られているとか、 millinillion ではなく millillion と表現する場合があるとか、 quinqua より quin の方が自然だろう
とかが話題として出ているので、 もし他のシステムと相違があって困った場合は確認してみてください。 例えば2の200乗の例では、sbclとclispでは
one novemdecillion
で始まりますが、The Conway-Wechsler Systemでは
one novendecillion
となります。
その他にもWikipediaに載っている方法も何となく違って見えます。
Names of large numbers
https://en.wikipedia.org/wiki/Names_of_large_numbers
ここまででThe Conway-Wechsler Systemの解説は終わりですので、 最後にいくつか話題を残します。 まずは、本解説を用いて出力した2の200乗の結果を下記に示します。
one novendecillion, six hundred and six octodecillion, nine hundred and thirty-eight septendecillion, forty-four sedecillion, two hundred and fifty-eight quindecillion, nine hundred and ninety quattuordecillion, two hundred and seventy-five tredecillion, five hundred and forty-one duodecillion, nine hundred and sixty-two undecillion, ninety-two decillion, three hundred and forty-one nonillion, one hundred and sixty-two octillion, six hundred and two septillion, five hundred and twenty-two sextillion, two hundred and two quintillion, nine hundred and ninety-three quadrillion, seven hundred and eighty-two trillion, seven hundred and ninety-two billion, eight hundred and thirty-five million, three hundred and one thousand, three hundred and seventy-six
せっかくなのでgoogolについての話題もしておきます。 googolとは「10の100乗」を意味しており、 wikipediaによると検索サイトgoogleはgoogolの誤字がもとになっているとのこと。
The Conway-Wechsler Systemによると、10の100乗は下記のようになります。
ten duotrigintillion
あと、商Nが0から1000くらいまでならnpt
のテストケースに例がありますので示します。
https://github.com/nptcl/npt/blob/v0.1.1/test/case_large.txt
次の投稿では序数と負数について説明します。