对中国汉字数字记数法和阿拉伯数码记数法的发明细节之探析-猜想,过五关斩六将

按:本文节选自“作为概念的(自然)数是如何被认识到——发明和/或发现——的?一个猜想”的注释(注释4、注释6),因感觉其重要(数学第一课是识数,而识数的前提和基础就是记数法),故特单独将其成文,希望对有心者有所启发和裨益。

无论是中国汉字数字记数法还是印度-阿拉伯数码记数法,现在都是我们日用而不自知的知识,并且我们也没有认真仔细的学习过这方面的知识。

学懂记数法其实是真正识数的基础和关键。如何才能更好的学懂呢?没有比与古人一起发明创造它更好的方式了。但古人没告诉我们他们是如何发明的,所以,我们唯有猜想。

以下,随我的猜想与古人一起发明记数法。

一、中国汉字数字记数法

中国的汉字数字记数系统以“一、二、三、四、五、六、七、八、九、十、百、千、万、……”这些有限的基本数字按“十进制”和“位值制”——合称为“十进位值制”(“十进制”的是否就必然是“位值制”的?我不太确定。下文分开讨论)——的规则进行组合的方式来表示所有的数,这种表示“数”的方式即我们现在所称的记数法。

这套记数法从发明到成熟经历了数千年的漫长历程。甲骨文时期之前现在还不可考,所以其发明只能通过甲骨文来推测重演,其成熟在篆文时期,至隶书(其创始在秦朝)时已几近于今天的样态。

以下分别通过甲骨文、篆文中所记载的“数”以及今人对“数”的读写方式来考察、认识这套记数法。

1、甲骨文中的记数法

我们先通过甲骨文来推测并重演这套记数法是如何发明出来的。

由于甲骨文时期古人还未抽象出“数”的概念故而还没有“数”之观念——“数”这个文字在甲骨文和金文中都没有(发现)而是始见于战国文字,所以,甲骨文中的在我们今天看来已算是“数”的“数”还不能称之为“数”,而只能称之为“多少”。

(1) 用“一~十”的“数字”表示“一~九十九”的“数”

甲骨文时期之前(可能“前”到以千年计)的某个时期的中国古人在发明出了表示“一、二、三、四、五、六、七、八、九、十”这十种“多少”(即“数”)的基本符号(即“一~十”这十个“数”/“数字”)之后,要继续表示比“十”还“多”的“多少”(即比“十”还大的“数”)就存在两种方案,一种是继续发明更多新的符号,另一种是基于精简原则就用这有限的十个基本符号去表示比“十”还“多”的“多少”(即比“十”还大的“数”),智慧的中国古人选择了后一种。

500

甲骨文:一、二、三、四、五、六、七、八、九、十

那如何用“一~十”这十个基本符号去表示比“十”还“多”的“多少”(即比“十”还大的“数”)呢?

先看比“十”这种“多少”还再“多”“一”的这种“多少”(即“十”加“一”之后的“数”),如何去表示它呢?智慧的中国古人在深思熟虑之后发明了第一招。

第一招,单体符号组合

就是将“十”和“一”这两个符号组合起来去表示比“十”还“多”“一”的这种“多少”。

在古人由上到下、从右至左的刻写习惯下,“十”与“一”的组合有四种形式:

第一种,“十”上“一”下(按我们现在从左到右的习惯,就是“十”在“一”前/左);

第二种,“十”下“一”上(按我们现在从左到右的习惯,就是“十”在“一”后/右);

第三种,“十”与“一”的合体(合文),即“一”在“十”上/内。

其中,第三种的“合体/合文”的形式容易与单体的“七”(形似现在的“十”)混淆,不妥当,放弃。第二种形式不合于解读习惯,即按刻写的顺序依次来读,不妥当,放弃。第一种形式没有什么问题,也只剩下这一种形式了,只能采取它。

于是,比“十”这种“多少”还再“多”“一”的这种“多少”(即“十”加“一”之后的“数”)就表示为“十一”了。

依此类推,十二、十三、十四、十五、十六、十七、十八、十九就顺理成章的表示出来了。

为了防止“十四”这样的由两个单体符号组合表示的一个“多少”(即:一个“数”)被误认为分别是两个单体符号表示的两个“多少”(即:两个“数”),有时会在该组合的两个单体符号之间加一个“有”或“又”字。

        

甲骨文:十七、十四(写作“十有四”)

再继续表示比“十九”“多”“一”的这种“多少”时,难题和困扰又来了。

于是,在寻求解决难题和困扰的方案过程中,智慧的中国古人发明了第二招。

第二招,十进制。

比“十九”“多”“一”的这种“多少”怎么去表示呢?“九”“多”“一”就是“十”了,那就有两个“十”了。

就用“两个‘十’”去表示比“十九”“多”“一”的这种“多少”吗?那如何赋予这“两个‘十’”以表示比“十九”“多”“一”的这种“多少”的意义呢?或者说,如何理解将比“十九”“多”“一”的这种“多少”表示为“两个‘十’”呢?

因为可以另外发明一个新符号去表示(如玛雅文明记数法中的“二十进制”那样:1-19的数都是用表示1的点“•”和表示5的杠/横线“——”的组合形式来表示的,20的表示就要另外发明一个新符号“略”并将之与表示1的点“•”组合——即“1个20”,表示40就是用这个新符号与表示2的两个点“••”组合——即“2个20”),但智慧的中国古人没有选择”这个发明新符号的方案,而是坚持“精简原则”用既有的“一~十”这十个符号来表示。

既然是满“十”了就用这个“十”与原有的“十”组合去表示比“十九”“多”“一”的这种“多少”,那也就意味着每满一个“十”,新的“多少”的表示形式中就多“一”个“十”,那就是“满十进一”(在这里还不太明显,在后面对“五十、六十、七十、……”的表示中就很明显了)了。

于是,智慧的中国古人确立了“十进制”。

“十进制”既已确立(意味着对“两个‘十’的组合”的表示形式赋予了意义和理解/解读的规则),那就可以用“两个‘十’的组合”去表示比“十九”“多”“一”的这种“多少”了。

那这两个“十”如何去排列呢?有两种形式可选:

第一,两个“十”一上一下排列;

第二,两个“十”左右并列排列。

第一种显然不可取,因为会太长导致占位置太多,而且再多几个“十”的时候就会更长以至于刻写载体都刻写不下了,所以甚为不妥,放弃;第二种似乎合适,但有可能与单体的“八”混淆,更有可能使得左边的那个“十”被混淆为左边一列文字中的内容,所以得给这左右并列的两个“十”加一点修饰使其变成“廿”这样的形式,这样它就只能被认作一个字了。

于是,比“十九”“多”“一”的这种“多少”就表示为“廿”了。

甲骨文:二十(“十”和“十”并列并加修饰)

比“廿”再“多”“一”就可表示为“廿一”了(“廿”在上、“一”在下,道理如前述,按习惯性的解读顺序排列,后文类似处不再另注)。

依此类推,继续表示下去:

廿二、廿三、廿四、廿五、廿六、廿七、廿八、廿九。

比“廿九”“多”“一”的这种“多少”又该如何去表示呢?

首先,循规采用“十进制”;

其次,遵照将比“十九”“多”“一”的这种“多少”表示为“廿”的形式的道理和做法。

于是,比“廿九”“多”“一”的这种“多少”表示为“卅”(后面的“卌”同理)。

500

甲骨文:三十”、四十(并列“十”并加修饰)

与前述同理,继续表示下去:

卅一、卅二、卅三、卅四、卅五、卅六、卅七、卅八、卅九;

卌;

卌一、卌二、卌三、卌四、卌五、卌六、卌七、卌八、卌九。

500        500

甲骨文:三十七、四十一

比“卌九”再“多”“一”就有/成了五个“十”了,难道要效法“廿、卅、卌”将其并列(加修饰)吗?一来并列的“十”也太多了点导致占的位置太宽;二来照此下去,后面要并列的“十”会越来越多导致占位过宽,会宽到妨碍左右两列的正常行文,同时也不便于识读。

所以,继续并列五个“十”(加修饰)的形式不妥当、不可取,需另谋良策。

而能用的又只有“一~十”这十个符号,故而可选的方案似乎是唯一的,即:

仿照“廿、卅、卌”将几个单体符号糅合在一起变成“合体/合文”符号的形式,将“五”和“十”这两个单体符号糅合在一起成为一个“合体/合文”符号的形式来表示比“卌九”再“多”“一”的这个“多少”。

甲骨文:五十

但这个“合体/合文”符号中的“五”已经不是表示“五”这个“多少”的“五”、“十”也已经不是表示“十”这个“多少”的“十”(注:合文符号中的数字“五”已经不是表示“五”这个“数”的“五”,“十”同理),那该如何赋予这个“合体/合文”符号形式的“五十”以意义或者说如何理解其中的“五”和“十”呢?

于是,智慧的中国古人经过苦思冥想发明了第三招。

第三招,位值制(萌芽样态)

既然这个“合体/合文”符号形式的“五十”(其甲骨文形式如下图)表示的是比“卌九”再“多”“一”的这个“多少”(即“五十”这个“数”),且是用来代替“并列的五个‘十’”的形式的,那就赋予“五”以“‘五’个/倍‘…’”的意义/意思,而这个“…”就是本该并列的那个“十”;或者可以这样理解:“合体/合文”符号中的“十”就相当于一个“基数”,而其中的“五”就是这个“基数”的“个/倍数”。将此理解确立为规则,后面的同类“多少”的表示遵从此规则。

按此规则,后面就有“合体/合文”符号形式的“六十”、“七十”、“八十”、“九十”。

500

甲骨文:二十、三十、四十、五十、六十、七十、八十、九十

这个规则其实就是“位值制”(只不过在此甲骨文时期还处于萌芽样态,但到了篆文时期就表现得非常明显和成熟——因为篆文已没有“合体/合文”而全部是单体的)。

这样,比“卌九”再“多”“一”就表示为“五十”了(“十”在上。为什么?或许没什么特别的道理,第一反应就是要这样放)。

综合运用前面的三招——遵循前述三大规则,“五十”之后的“多少”依次表示为:

五十一、五十二、……、五十八、五十九、六十;

六十一、六十二、……、六十八、六十九、七十;

七十一、七十二、……、七十八、七十九、八十;

八十一、八十二、……、八十八、八十九、九十;

九十一、九十二、……、九十八、九十九、十十

500        500

甲骨文:五十六(写作“五十有六”)、八十八

整体观之,前文述及的“十进制”(“满/逢十进一”)从“五十”起已表现得非常明显。

(2)新创数字“百”以便利于表示“一百~九百九十九”的“数”

如果仅限于用“一~十”的符号,并按“五十、六十、七十、八十、九十”的表示形式之惯例,那么比“九十九”再“多”“一”的这个“多少”只能用上下相连的两个“十”的“合文/合体”符号形式来表示了。

这种表示形式是不妥当的:

第一,这个“合文/合体”符号要么为了表示其是上下两个“十”相连就必须刻写得很长,这样除刻写费劲且不便外,也占据位置过多,要么就刻写得稍长一些,这样又容易与一个单独的“十”混淆;

第二,若这样表示,那后面会有三个“十”相连、四个“十”相连、五个“十”相连、……,这就长得连刻写载体都容纳不了了,更麻烦的是也难于解读了。

即使不遵上下结构的“合文/合体”形式而采取左右结构的形式也不行,因为左右并列的形式已经被“廿”(即“二十”)、“卅”(即“三十”)、“卌”(即“四十”)用了,再用就会混淆了。

如何解决这个难题呢?在既有条件下,似乎没有妥当的解决方案了。

因此,不得不创造一个新的符号(代替“两个‘十’上下相连的‘合体/合文’符号”)来表示比“九十九”再“多”“一”的这个“多少”了。

于是,古人新创了一个符号:白(取其近似)

500

甲骨文:白(取其近似)

“白”这个新创的符号对应于“‘十’个/倍‘十’”(相当于一个“基数”,也即我们现在所称的“数位”),将它与“一”糅合成“合体/合文”就得到了“百”。

500

甲骨文:一百(写作:百。“一”与“白”的“合体/合文”)

这个“百”中的“一”表示“‘一’个/倍‘白’”(即“基数”“白”的个数,也即以“白”这个“数位”来定的“一”所实际对应的“数”——100),也即“一”个/倍的“‘十’个/倍‘十’”。

如此,比“九十九”再“多”“一”的这个“多少”就表示为“百”(“一白”,也即“一百”)了。

与“百”同理,将二、三、四、五、六、七、八、九分别与“白”写成“合体/和合文”就分别表示“‘二’个/倍‘白’”、“‘三’个/倍‘白’”、……、“‘九’个/倍‘白’”也即“二百”、“三百”、……、“九百”。

甲骨文:二百、三百、四百、五百、八百

有了“百”这个新符号,按“单体符号组合”、“十进制”和“位值制”三大表示规则,继续表示“百”后面的“多少”。

500

甲骨文:(一)百(一)十四、(一)百六十、二百六十九、四百五十一、五百(一)十

500

甲骨文:一百九十九(写作:百有九十有九)、二百零九(写作:二百有九)、三百四十八(写作:三百又卌八)

以下表示中带下划线“    ”表示“合体/合文”,“有”或“又”是甲骨文中表示前后两个符号是一个组合内的以避免混淆。

百有一、百又二、……、百有八、百又九、百十;

百十一、百十二、……、百十八、百十九、百廿;

百廿一、百廿二、……、百廿八、百廿九、百卅;

百卅一、百卅二、……、百卅八、百卅九、百卌;

百卌一、百卌二、……、百卌八、百卌九、百五十;

百五十一、百五十二、……、百五十九、百六十;

百六十一、百六十二、……、百六十九、百七十;

百七十一、百七十二、……、百七十九、百八十;

百八十一、百八十二、……、百八十九、百九十;

百九十一、百九十二、……、百九十九、二百;

二百又一、二百有一、……、二百又九、二百十;

二百十一、二百十二、……、二百十九、二百廿;

二百廿一、二百廿二、……、二百廿九、二百卅;

二百卅一、二百卅二、……、二百卅九、二百卌;

二百卌一、二百卌二、……、二百卌九、二百 五十;

二百 五十一、……、二百 五十九、二百 六十;

………………………………………………………………………

九百 九十一、……、九百 九十九、十百。

(3)新创数字“千”以便利于表示“一千~九千九百九十九”的“数”

比“九百 九十九”再“多”“一”,按“十进制”和“位值制”的表示规则:

第一步,末尾的“九”“多”“一”则为“十”,“满十进一”,新得“一”个“十”;

第二步,新得的“一”个“十”与已有的“九”个“十”(即“九十”)相加得“十”个“十”,“十”个“十”即为“百”,满十进一,新得“一”个“百”;

第三步,新得的“一”个“百”与本有的“九”个“百”(即“九百”)相加得“十”个“百”。

那么,比“九百 九十九”再“多”“一”所得的“十”个“百”就表示为“十百”吗?

就其自身来说,规则上是合规的,形式上也适当。

但若如此表示,那后面的“十一百”(即“‘十一’个/倍‘百’”)就虽然合规但形式上就不妥当了。

而且既然“‘十’个/倍‘十’”已经发明了新符号“百”/“白”来表示,那么“十”个“百”也需要发明一个新符号去表示并代替“十百”。

于是,古人新创了一个符号:千

“千”这个符号在形制上与“百”类似,是“一”与“千”的“合体/合文”并从中减省掉一个横即“一”,它既表示“千”又表示“一千”。

同理,“二千”、“三千”、“四千”就是“二”、“三”、“四”分别与“千”的“合体/合文”并从中减省掉一个横即“一”。

“五千”就是“五”与“千”的“合体/合文”并从中去掉“千”本有的那个横即“一”,或者说是用“五”取代“千”中的那个“一”。

“六千”、“七千”、“八千”、“九千”则不然,因为“六”、“七”、“八”、“九”在形式上(笔画的相似度)与“千”接近,“合体/合文”的区分度和解读性都不太好,所以不再采取“合体/合文”形式,而是以两个单体形式的“六”与“千”以组合形式来表示“六千”,“七千”、“八千”、“九千”同理。

甲骨文:(一)千、二千、三千、四千、五千、七千

有了“千”这个新符号,按“单体符号组合”、“十进制”和“位值制”三大表示规则,继续表示“千”后面的“多少”。

甲骨文:二千六百五十

以下表示中带下划线“    ”表示“合体/合文”,“有”或“又”是甲骨文中表示前后两个符号是一个组合内的以避免混淆。

千有一、千又二、……、千有八、千又九、千有十;

千有十一、千又十二、……、千有十九、千又廿;

千有廿一、千有廿二、……、千有廿九、千又卅;

千又卅一、千有卅二、……、千又卅九、千有卌;

千有卌一、千又卌二、……、千有卌九、千又五十;

千又五十一、……、千又五十九、千又六十;

……………………………………………………………………

千又三百又一、……、千有三百有九、千又三百十;

……………………………………………………………………

千有九百 九十一、……、千有九百 九十九、二千;

二千又一、二千有二、……、二千有九、二千有十;

……………………………………………………………………

九千 九百 九十一、……、九千 九百 九十九、十千。

(4)新创数字“万”以便利于表示“一万~九万九千九百九十九”的“数”

与将“十百”用新创的符号“千”来代替以表示比“九百九十九”再“多”“一”的这个“多少”同理,古人新创了一个符号“万”代替“十千”来表示比“九千九百九十九”再“多”“一”的这个“多少”。

500

甲骨文:万(其繁体字形:萬)

有了“万”,就可以表示更多的“多少”(即“数”)了。

按“单体符号组合”、“十进制”和“位值制”三大表示规则,理论上可以从“万又一”一直表示到“九万九千九百九十九”(即从10001~99999)。

但古人在实践中与之打交道的事物的“多少”还十分有限,故而在甲骨文中已经发现的最“多”的“多少”(即最大的“数”)是“三万”。

 

甲骨文:三万(甲骨文中发现的最大的“数”)

2、篆文中的记数法

我们再通过篆文来考察、认识一下成熟样态的汉字数字记数法。

甲骨文中表示“多少”的图形符号到篆文时已发展为成熟的文字符号,且由于篆文时期时古人已从用篆文文字符号表示的“多少”中抽象出了“数”的概念并随之有了“数”之观念,故而我们将用篆文文字符号表示的“多少”称为“数”,而将表示“数”的文字符号称为“数字”。

篆文中的用数字表示的数已基本没有甲骨文中的“合体/合文”的形式(仅有“廿、卅”——或还有其它的——保留了下来),而全部是单体数字的组合。

500

小篆/秦古隶(云梦睡虎地秦墓竹简):二千二百。简上还有:二百廿

可见,篆文所记之数除了字形不一样之外,其样态已与今文(现今日常所用的汉字简笔字)所记之数非常一致。

所以,接下来我们通过今文继续考察、认识我们的汉字数字记数法。

3、今文(汉字简笔字)中的记数法

我们现今日常所用的数字与甲骨文时期基本一致,仅多了一个数字“亿”:

一、二、三、四、五、六、七、八、九、十、亿。

数字“亿”始见于篆文(大致年代在周初或春秋时期),至于其究竟表示的是什么数或者说多大的数,要看其在多大的数范围内或者说在什么级别的数上。

据东汉时期徐岳编撰的《数术记遗》记载:

黄帝为法,数有十等,及其用也,乃有三焉。十等者,亿、兆、京、垓、秭、穰、沟、涧、正、载。三等者,谓上中下也。其下数者,十十变之,若言十万曰亿,十亿曰兆,十兆曰京。中数者、万万变之,若言万万曰亿、万万亿曰兆、万万兆曰京。上数者数穷则变,若言万万曰亿,亿亿曰兆,兆兆曰京也。下数浅短,计事则不尽,上数宏廓,世不可用,故其传业惟以中数耳。

我的观点是:

第一,人类在领会到数之无穷之前,所记之数包括其计算都与实践中打交道的事物的多少密切相关,而实践中所打交道的事物的数量是有限的,故而用不着太大的数去表示,因此“万”以上的数字如“亿、兆、京、……”最初发明时是按“十进制”的,即所谓“……十十变之……十万曰亿,十亿曰兆,十兆曰京”;

第二,人类在领会到数之无穷之后,对于表示大数就产生了需求,再去发明新的数字就比较麻烦,也会因为数字太多而凌乱,加之记数法中的“位值制”已发展成熟(下文详述),故而可以借用已经发明的“亿、兆、京、……”这些数字来表示大数,只要将其数位/数的等级提升一下即可,即所谓“中数者、万万变之,若言万万曰亿、万万亿曰兆、万万兆曰京”,虽然还是“十进制”,但由于记数法中“位值制”的明显、成熟和易于解读,“亿、兆、京、……”的数的等级就易于识读了。

我们来看一个用今文的汉字数字记数法表示的大数(处于《数术记遗》中所载“黄帝为法”中的“中数”等级,我们现今也是按这个“中数”之法来记数的):

九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九

这是这个数的写法,那这个数是多少呢——也即怎么识读/读数呢?

很简单,直接按所记数字读出来就可以了(每个字的发音发出来即可):

九千九百九十九万九千九百九十九亿九千九百九十九万九千九百九十九

也就是说,我们的汉字数字记数法是“读写统/同一”的。

而我们现今普遍采用的印度-阿拉伯数字/码记数法是“读写不一致”的。

其记法:9999999999999999

其读法:先由右至左从低位到高位挨个点过去辨识数位,确立了数位以后,还得给其加个分级标记(汉语的习惯是“四个数位一个数级”,英语德语法语等西语的习惯是“三个数位一个数级”),继而确立读法的中心数位(按汉语习惯,这个数的读法的中心数位是“亿”),然后才能按已经辨识出的数位从高位向低位依次读过去。

“读写统/同一”是汉字数字记数法相比印度-阿拉伯数字/码记数法的一项巨大优势,恐怕也是我们的祖先在印度-阿拉伯数字/码记数法传入中国后仍然坚持使用我们自己的汉字数字记数法的最主要的原因。

再来看一下汉字记数法中的“十进制”和“位值制”。

写出“一~(一)十万”的数如下表:

500

从中可以发现,“十进制”(满/逢十进一)是显然的。

至于“位值制”,则不那么显而易见,需要剖析一下,因为我们通常习惯了印度-阿拉伯数字/码记数法中的位值制,就以它为标准来看其它的记数法,结果发现我们的汉字数字记数法所记之数从表面形式上看,根本不符合那个标准形式。

来看一个数,其记/写法:一万二千三百四十五

其中,只有数字“五”才对应于它所表示的数“五”,其它的数字尽皆不与其所表示的数对应,比如,数字“十”表示的并非其对应的数“十”,数字“四”表示的也并非其对应的数“四”,数字“十”和“四”是作为一个整体存在的,其中的“十”是作为“基数”存在的、“四”表示的是此“基数”的数量(个数或倍数),作为整体它就表示“‘四’个‘十’”或“‘十’的‘四’倍”也即“四十”(即40),“三百”、“二千”、“一万”同理。

该数中作为“基数”存在的“十”、“百”、“千”、“万”其实就是标识/标示各自前面的“四”、“三”、“二”、“一”所实际对应的数的“数等”(数的等级,我编的名称)。

或者干脆就可以说,该数中的“十”、“百”、“千”、“万”就是各自前面的“四”、“三”、“二”、“一”的“数位”,只不过这些“数位”被明写出来了,而不像印度-阿拉伯数字/码记数法中那样“数位”是隐藏在其书写形式内的而要挨个清点辨识才能将其确认。

所以,如果非要以印度-阿拉伯数字/码记数法中的“位值制"的形式为标准,那么中国汉字记数法中的”位值制“可以称为”半位值制“。

其实,中国汉字记数完全可以与印度-阿拉伯数字/码记数在形式上也一致。

比如前述的数“一万二千三百四十五”,可以写成“一二三四五”,与“12345”在形式上一致。识读“一二三四五”也完全可以与识读“12345”一样,先辨识数位,然后读数。

而在中国古人发明的筹算术(其记载最早见于战国文献,但其发明时间应该早得多,我认为至少是在甲骨文中的记数系统发明后不久就被发明了,因为既然已经用“具体的‘数’”——如果非要称其为数的话——去认识事物了,那随之就会产生计算的需求,就要发明计算之术)中,实际上已经实践了“一二三四五”这种表示数的方法。

500

中国古人发明的筹算

其中的“位值制”显而易见。

中国古人之所以未将汉字数字记数法从“一万二千三百四十五”的形式“进化”为“一二三四五”的形式,主要在于其“读写统/同一”的巨大优势(坚定的文化自信必须以对我们文化的深刻理解和领会为基础)。

二、印度-阿拉伯数码记数法

印度-阿拉伯数字/码记数法用“1、2、3、4、5、6、7、8、9、0”这十个数字/码采用组合方式和“十进位值制”(十进制+位值制)去表示所有的数。

其中,“0”是在“1~9”这9个数字发明以后很长时间才发明的,刚开始只是表示一个“空位”即“该位没有相应的数字可以表示其意思故而‘空’在那里”,后来为避免误读误解,就用比如小黑点“●”填补这个“空位”,后来又改用小圈圈“◯”,直到古印度人真正领会了“空”或者叫“虚无”的本质和意义之后“0”这个数字才被发明出来(主流看法如此)。

我们以假设该记数法是原生的为前提——这意味着所有的任何一个数都有待去认识并发明它的表示法——来考察、认识一下仅用“1、2、3、4、5、6、7、8、9、0”这十个数码去表示所有的数。

首先,自然地,用作为数字的“1、2、3、4、5、6、7、8、9”可以表示作为数的“1、2、3、4、5、6、7、8、9”。

接着,我们来看比9多1的数(即9的“后继数”)怎么去表示。

由于9已经是单独的数码所表示的最大的数了,而且也没有别的数码可用——如果不新创的话,所以只能用既有的数码通过组合的方式来解决这个困境了。

于是9的后继数(即比9多1的数或者说9加1之后的数)就记为了“1●”。

其中的“●”是用来占据空位的(最初是直接空位,“●”是过度形态,然后才是“0”)。

如何来理解这个“1●”呢?或者说,如何赋予这个“1●”以比9多1的数的意思呢?

首先,要导入“十”,确立“十进制”。

9加1后就满十了,“满十进一”,所进的“1”就成为“1●”中的“1”。

如果该记数法是原生的,则这时还没有“十”这个数呢。那“满十进一”及其中的“十”作何解呢?所以要先导入“十”。

“十”应可理解为手指个数。古人在用手指辅助对事物进行计数时,点过一轮全部十个手指可能就会作个标记(比如在地上画个杠,或放个小石子),然后继续从头点手指,再点过一轮全部十个手指后就再增加一个同样的标记(再画一条杠,或再放一个小石子)。在此实践中就能领会到“满十进一”。

其次,引入“位值”、“数位”,确立“位值制”/“数位制”。

原来的9消失了,留下一个空的位置,“满十进一”所进的“1”占据了空位前面的位置。也就是说,只占一个位置的9的后继数用了占据两个位置的符号来表示。

“空”的这个位置的“空”就是表示什么都没有,或者说没有数字能表示它。

“1”所占据的位置的“1”可以看作全部十根手指头的数量的一个整体(或者说以全部十根手指头的数量为基数,“1”表示1个或1倍的基数),但“1”又明显不等同于“十”(全部手指头至少有9个了——9已是可表示的数了)。

所以,只有赋予在此位置上的“1”以“十”(全部手指头的数量)的意义/意思,这个“1”才能代表“十”。而在此位置上的数字“1”与以数字1表示的“1”这个数相比,唯一的不同,仅仅是其位置。因此,“1”这个数字因其所在位置而实际表示“十”这个数。

于是,“位值”的观念就诞生了(随着数的位数渐多,“数位”的概念就被发明出来了)。

这样,9的后继数就被表示为“1●”。

那“1●”的后继数怎么表示呢?

原来9所在的位置当9加1满十进一而“消失”之后就成“空”——以“●”示意这儿还是/有个位置——的了,那“1●”再加1,这个1自然加到这个“空”的位置上,这样,原本为空的位置现在有数字1占据了表示1这个数。

于是“1●”再加1的数就表示为“11”了,左边的数字1因其位值为十,所以表示1个十,右边的数字1的位值就是数字原本对应的数即1这个数。

这样,“1●”的后继数就被表示为“11”了。

依此类推,随后的后继数依次表示为:

12、13、14、15、16、17、18、19

那19再加1后的数如何表示呢?

继续采用前面确立的“十进制”,满十进一,9变成十后进一个1然后自己消失让这个位置又成“空”,进的这个1到了左边的位置,加到这个位置本有的1上,于是这个位置变成2,这个2因其“位值”为“十”,所以实际对应的数是“两个十”即“二十”。

于是19再加1后的数就被表示为“2●”。

“2●”再加1后的数与前述同理,表示为“21”。

按“十进制”和“位值”的观念,随后的后继续依次表示为:

22、23、……、34、……、55、……、76、……、98、99

99再加1后的数如何表示呢?

按“十进制”,满十进一,两个9所在的位置都成“空”了,右边的9满十进的1进到了其左边的9上,左边的9也随即满十了,再进的1就没位置了,所以,向左边再拓展出一个位置来安放进的这个1。

于是,99的后继数被表示为“1●●”。

其中的1因其位置而实际对应的数是“十个十”即“一百”,所以其“位值”就是“百”了。

之后的后继数与前述同理,依次表示为:

1●1、1●2、1●3、……、1●7、1●8、1●9、11●;

111、112、113、……、117、118、119、12●;

……………………………………………………………………

1●2●3●4●、……、5●6●7●8●9、……、999999999

……………………………………………………………………

1●●●●●●●●●●●、……、12345678987654321;

……………………………………………………………………

随着拓展出的位置渐多,根究“位值”的观念发明了“数位”的概念,用以标识一个数中每个数字所占位置的“位值”。

于是,“位值制”/“数位制”确立了。

占据“空”位代替“●”的圈零符号“0”在以后也被发明出来,并且逐渐被认识为与1~9一样的数字(而不仅仅是一个占位符号),并可参与运算。

依据“十进制”和“位值制”,用“1、2、3、4、5、6、7、8、9、0”这十个数字就可以表示所有的数了。

我们来看一个大数:

12345678987654321

这个数是多少呢?这就需要对其进行识读——相当于解译。

而此识读又是因语言不同而大异其趣的。

因此,与汉字数字记数法“读写统/同一”的特点相比,印度-阿拉伯数码记数法是“读写不一致”的——至少汉语、英语、德语、法语等语言读该记数法记的同一个数的读法就有较大的差异(汉语与西语之间有大异,西语之间也有小异),不知道用古印度语会是怎么样。

先以汉语来识读这个数:12345678987654321。

第一步,辨识每个数字所在的数位。

从右至左、由低位向高位挨个位置清点过去,并随清点而读出数位:

个,十,百,千,万,十万,百万,千万,亿,十亿,百亿,千亿,万亿,十万亿,百万亿,千万亿,亿亿(万万亿)

当然,按我们四个数位一个数级的方法和习惯,会让辨识数位相对简易一些。

第二步,确立读取的中心数位。

确立了数位后,读取时也不能每个数字与其数位都读出来如这样:

一亿亿二千万亿三百万亿四十万亿五万亿六千亿七百亿八十亿九亿八千万七百万六十万五万四千三百二十一。

当然,这种读法应该也不算“错”,只是麻烦和不变。所以得改进。

改进方式就是:确立单一数位(姑且如此称之。比如“亿”,而“千亿”这样就是复合数位了)中的最高位为读数时的中心数位,然后围绕这个中心数位来读。

第三步,读取该数。

比如这个数的最高单一数位是“亿”,那就围绕“亿”来读取这个数。

如这样:

一亿亿贰仟叁佰肆拾伍万六千七百八十九亿八千七百六十五万四千三百二十一。

或这样:

一亿贰仟叁佰肆拾伍万六千七百八十九亿八千七百六十五万四千三百二十一。

这是用汉语来识读这个数。

那若用英语如何来识读这个数——12345678987654321——呢?

这里不详细展开,仅择其要者说一下。

英语中每三个位置才有一个数位名称,如“千”(thousand)往上跳了两个数位后是“百万”(million)、“百万”(million)再跳过两个数位后是“十亿”(billion)、“十亿”(billion)再跳过两个数位后是“万亿”(trillion)。这个数位自然也就是其数级。

读数时先将数级用“,”标记出来,如这样:

12,345,678,987,654,321

然后按汉语读数时围绕“中心数位”读取类似,读出这个数:

twelve thousand three hundred and forty-five trillion and six hundred and seventy-eight billion nine hundred and eighty-seven million six hundred and fifty-four thousand three hundred and twenty-one

最后来一点暴论:

印度-阿拉伯数字/码记数法中每个数位的名称应该以该名称也对应于相应的数为前提,也即是说,你得先有每个数位的这种读法的数(如汉字数字记数中的“十、百、千、万、十万、百万、千万、亿、……”既是数字又对应于具体的数)。

所以,用“1~9”这九个数字/码来表示数的记数法应该是次生的而不是原生的。其源头——在此基础上加以改造而成“1~9”数码的记数法——可能有两个:一个是印度本土的某种符号的记数法,一个是中国的某种符号的记数法(尤其是中国筹算术中表示数的方法)。

原文参见:作为概念的(自然)数是如何被认识到——发明和/或发现——的?一个猜想

站务

全部专栏