数
数(かず、すう、number)とは、
ものの順序を示す語。また、その記号・数字。
個々の物(もの)や事(こと)が、(全体または一定の範囲で)いくつあるか(あるいは何回おきるか)ということを表すもの。
ITなど特定の分野においては「数値(すうち)」ともいう。
数の概念は人類の歴史とともに、非常に長い年月をかけて、ゆっくりと、徐々に、拡張されてきた。
もっとも素朴な数は、ものの順番や個数としての自然数である。つまり「1, 2, 3, ....」などという数である。
その自然数に加えて、古代バビロニアや古代インドにおいて、現代で言う「ゼロ」に似たような概念を使おうとする人が現れた。なお、「1, 2, 3, 4, 5...」という概念しか知らなかったところに加えて、「ゼロ」という概念を発明し 数を拡張したことは、数学の長い歴史の中でも特に大きな跳躍だった、とされることがある。「無い」ということを「ひとつの概念」として扱おうとしたこと、つまり、(最初は引き算などの中で)自然数では表記できない事例に遭遇した時に、単に文章の中で「(何かが)無い」「...をすると、(ちょうど、それが)無くなる」などの表現をして終わらせるのでなく、その状態を「ひとつの概念」として意識を向けてそれを扱おうとしたことや、特定の記号でその概念を表現しようとしたことや、その状態まで含めて(大胆にも)「『数』の一種」だと位置付けようとしたこと、などが行われたことによってはじめて、(ゼロを発明した当時、発明した人も、そんな展開になるとは夢にも思っていなかったであろうが)現代の広大な数の体系へと続く長い道のりが始まった。そもそも先例も無く、思考の足掛かりらしい足掛かりも無いのに、「ゼロ」という概念の萌芽のようなものを最初に思いつく、ということ自体が人類にとって非常に大変なことであった。また、「無い」ことを概念として本当に扱ってよいのか?思考の対象として良いのか?良くないのか? ということすら良く判らず、非常に長い間、得体の知れない、不気味な概念だった。また、(現在の「ゼロ」に比べれば不完全な形ながらも)やっとなんとか「ゼロ」に近いものを思いつき、扱ってみようと試みる人が現れた後も、そのアイディアを口にしたり文章に書いたりすると、「そんな妙なアイディアは認めるべきでない」や「危険なアイディアだ」などと否定する人のほうがはるかに多く、結局、古代ギリシア文明のように「ゼロ」概念を(文明全体として)否定(や禁止)してしまったものもあったなど、古代のさまざまな文明で「ゼロ」という概念を巡り人々は迷い、争い、葛藤した。
長い時代を経て、自然数にゼロ(零)、およびひとつひとつの自然数と一対になっている「負の数」という概念(今で言う「負の整数」という概念)を加えることで、「整数」(integer)というまとまりが考えだされた。なお、この段階では「自然数」「ゼロ」および「負の数」で、「全ての数」と考えられていた(信じられていた)ので「integer」と呼ばれていたのである(もともとintegerとは「全体」や「欠けの無い」という意味を持つ)。
さらに整数の商を考えて有理数と拡張され、四則演算が自由に行える体系を得る。有理数から実数への拡張はこのような演算とは異なるギャップを埋めることで得られ、代数方程式の解法を通じて虚数を含む複素数へと拡張された。
自然数 → 整数 → 有理数 → 実数 → 複素数
複素数 - 虚数、実数
複素数 - 代数的数、超越数
実数 - 無理数、有理数
整数 - 自然数、負の整数
自然数 = 正の整数
フランスの数学者、アンリ・ポアンカレは「数」の定義は難しく、0、1などを厳密に定義するのは難しいと説明している。
これらを更に別の観点から拡張した体系が存在する。例えば、ものの個数の概念である自然数を拡張して基数が、ものの順番を表す意味での自然数の拡張として順序数が定義される。複素数を更に拡張したものとして、四元数・八元数・十六元数などの体系がある。あるいは、実数に加えて無限小や無限大を含む超実数などの体系もある。
自然数 → 基数
基数 - 有限基数(= 自然数)、無限基数
自然数 → 順序数
順序数 - 有限順序数(= 自然数)、超限順序数
実数 → 複素数 → 四元数 → 八元数 → 十六元数
有理数 → p-進数 (+ 実数 → アデール)
実数 → 超実数
数を如何にして数字に表すかという方法は記数法と呼ばれる。同じ数が、さまざまな記数法ごとに異なる表示をもつことは珍しいことではない。
以下の記事も参照のこと。
例えば十進法(表記)の「255」は、十六進法では「FF」と記述され、二進法では「1111 1111」と記述される。「255」と「FF」と「1111 1111」では、見た目(感覚的印象)はかなり異なるが、あくまで同じ数の概念を表している。
なお人類は、古代ではさかんに、十二進法や六十進法を用いてきた歴史がある。次第に用いられることが減ってきたが、現代でも時間や時刻の表示法(時・分・秒)や、緯度・経度の表示法、等々等々で用いられている。
十二進法は、はるか昔、古代バビロニアの時代から用いられていたわけだが、どうして十二進法が用いられるようになったのか?に関してはいくつかの説(仮説)があり、『(天球上で)太陽の軌道の位置が元の位置に戻ってくるまでの間に、つまり1年の間に(ざっくりと言うと)月が12まわり 変化する。古代では太陰暦のほうが標準的に用いられていたので、「12」という概念を用いて、ものごとを数えることがしばしば行われたのだ』という説や、『(バビロニアなどでは)数を数える時に(親指は用いず)、(類似の構造を持つ)人差し指・中指・薬指・小指の4本を用い、それぞれの指にある3つの関節(あるいは、関節と関節の間の平らな面)をひとつずつ指しながら数を数えたので、結果として、4(本) x 3(関節) = 12、が「ひとまとまり」や「ひと区切り」となったからだ。』といった説(また、それらが相互に助け合って、古代人の社会では十二進法使用が推進され、さかんに用いられた、などという説)が主流である。(ちなみに、ヘブライ人も12を「ひとまとまり」や「全部」と捉える発想を持っておりヘブライ語聖書に登場する「十二部族」は、単なる12個の部族というだけでなく、「全ての部族」という意味を持っている。こうした天体の動きや暦や人類の身体の構造などが、現代にまで使われつづける記数法を生んでおり、(文化的に)ひとつひとつの数に与えられている意味、意味付け、にも影響している。)
近・現代では、概して言えば、十進法表記が用いられていることが多い。理屈の上では、さまざまな記数法を採用しうるのに、(また、必ずしも十進法が他の進法と比較して優れているわけでもないのに)なぜ十進法が採用されることが多くなったのか? という疑問に関しては、おおむね(説明法の細部は異なっても)「人類の両手の指は合わせて10本あり、両手の指をつかって数を数えることが(必ずしも全ての民族ではないにしても)多くの民族で行われていたからだ」といった類の説明がされることが多い。いずれの方法でも、両手の指を全部使ったところである種の「ひとまとまり」や「ひと区切り」を迎えるので、自然と人類は十進法という発想法(記述法)を用いることが多くなった、といった説明である。
なお20世紀後半になってデジタルコンピュータの使用が急速に増えるにつれ、計算機科学の専門家やコンピュータ・エンジニアなどを中心として二進法や十六進法の活用が非常に活発になった。二進法はデジタルコンピュータのCPUでの数表現と直結していたからである。ただ二進法は、その表記量が増えると「1010 1111 0101 1100 ...」などといった調子で、あまりに桁数が多くなり、おまけに「0」「1」ばかりでは人間の頭脳の特性には向いておらず扱いにくくなるので、一旦それを十六進表記に変換して「AF5C...」などと表記したり、十六進表記でプログラム(の要素)を書いたり、十六進表記に対応したキーボードでそれを入力するしくみを作った。二進数表記と十六進数表記は、二進数の4桁(4文字)が十六進の1桁(1文字)に(ちょうど、まとめて、すっきりと)変換でき、一種の「相性」のようなものが良く便利なので、用いられた。例えば上記の「1010」→「A」と変換できる。また、コンピュータの仕組みとしては、「A」のキーが押されたら、内部的にはそれを「1010」と(デジタル回路のON/OFFで)表現すれば良く、2進で4桁分ずつデータを取り込んでゆけば良かった。(こうして1960年代~1980年代は、コンピュータを実際に操作する場面で、さかんに十六進表記のデータ群やプログラムが使われた。最近は、システム開発の焦点となる次元(アーキテクチャ内での階層)が変わり、コンピュータ・エンジニアが十六進表記の記述を扱うことはかなり減ったが)、デジタルコンピュータは今も、二進法を根本原理として、物理的に動いており、それに支配されている。これらのことから現在でも、コンピュータのエンジニアの資格試験では二進法・十六進法・十進法などの間の相互変換は(コンピュータの根本原理を理解するためにも、それを扱うために開発された技術的手法の歴史を理解する上でも)必修事項となっており、コンピュータ・エンジニアの資格取得者ならばそれらの相互変換ができる。
なお、ある数を記述するための記数法が指定されても、それでも表示がひとつに定まらないことがある。例えば、十進小数表示では 1 = 0.999... (右辺は、小数点以下の全ての桁が 9)という2通りの表示をもちうる。
デジタルコンピュータでは、全てのデータは内部的には、0/1 という数値の集まり(あるいはスイッチのOFF/ONという状態、さらに厳密に言えば Low/Highという2種類の電圧)という形で存在している。ひとつのスイッチのOFF/ONという状態が、数値の0/1と対応しており(同一視する方法で設計されており)、0/1があるので2進数が表現可能となっている。ひとつのスイッチ、0/1ひとつ、2進数の1桁相当を「1ビット」と言う。ひとつのスイッチが1桁の2進数に対応するので、スイッチの個数を増やして組み合わせてゆくことで(同タイプのスイッチを並べておいてひとまとまりとして扱うことで)、桁数の多い2進数も表現できる。2進数8桁を、しばしばひとかたまりとしてとらえて「1バイト」という。1バイト(=8ビット)で、28=256種類の値が表現できる。これの扱い方はいくつかあり、ひとつはこれを0〜255として扱う方法がある。あるいはこれを「-128〜0〜127」という整数などと見なして扱うこと(回路を設計すること)もできる。1バイトではわずかこの程度の範囲の整数しか表現できないが、桁数を増やす(ビット数、バイト数を増やす)ことで、もっと大きな整数を表現できることになる。たとえば2バイトならば、-32768〜+32767が表現できる。コンピュータの歴史では、CPUが一度に扱える桁数が 1バイト→2バイト→4バイト→8バイトと増すにつれ、大きな桁数の整数を表現し扱うことができるようになってきた。
(整数以上の数の表現方法まで説明するとあまりに長文になるので省略するが)ともかくこのようにして、さまざまな工夫をすることで、コンピュータの内部では、自然数・負の数・整数・実数などをLow/Highという電圧(あるいは0/1)の集まりで表現し、多数のスイッチの電位を超高速で連鎖的に変化させることで、数の演算を実現している。
なお、パソコンなどの回路では、文字も「文字コード」という数値で(さらに言えば、想定されている数値と対応する、スイッチ群のOn/Offという状態の形で)存在している。例えばラテン文字の1番目の大文字 A は標準的なASCIIコードやShift_JIS・UTF-8などでは十六進法表記で0x41(十進法表記で65)で、小文字の a は0x61=97である。同じように数字も文字として存在しており、文字 0 の数値は0x30=48である。