1兆=?

脑海中传来了小时候的儿歌,个、十、百、千、万、十万、百万、千万、亿、十亿、百亿、千亿、万亿、兆……

难保有人会持怀疑态度!喽,证据来了 (ˇ?ˇ)

《孙子算经》中记载:“凡大数之法,万万曰亿,万万亿曰兆,万万兆曰京,万万京曰垓,万万垓曰秭,万万秭曰穰,万万穰曰沟,万万沟曰涧,万万涧曰正,万万正曰载。”
——摘自百度百科

是的你没听错,个、十、百、千、万、亿、兆上面还有京、垓、秭、穰、沟、涧、正、载。收起你的惊讶(反正我是很惊讶了),事实上还不止于此

由小到大依次为一、十、百、千、万、亿、兆、京、垓、秭、穰、沟、涧、正、载、极、恒河沙、阿僧祇、那由他、不可思议、无量大数,万以下是十进制,万和亿之间为万进制,即万万为亿,亿以后为亿进制,即亿(万万)亿为兆,亿(万万)兆为京,亿(万万)京为垓以此类推到载;
小数点以下为“十退位”,名称依次为分、厘、毫、丝、忽、微、纤、沙、尘、埃、渺、莫、模糊、逡巡、须臾、瞬息、弹指、刹那、六德、虚空、清静、涅盘寂静。
——摘自百度百科

所以说我们可以确定的说,1兆 = 1亿亿 = 1 * 10^16.

但是,抱歉,我又调皮了,事情远非如此简单。

十等用三论

《五经算术》云
按黄帝为法,数有十等。及其用也,乃有三焉。
十等者,谓“亿、兆、京、垓、秭、穰、沟、涧、正、载”也。
三等者,谓“上、中、下”也。
下数者,十十变之。若言十万曰亿,十亿曰兆,十兆曰京也。
中数者,万万变之。若言万万曰亿,万亿曰兆,万兆曰京也。
上数者,数穷则变。若言万万曰亿,亿亿曰兆,兆兆曰京也。
——摘自百度百科

意不意外、开不开心、惊不惊喜!是不是感觉头都快要大了,说来说去,1兆到底是多少,为什么会有这么多稀奇古怪的数法?

Oh!这个时候有的童鞋是不是想到了什么更加稀奇古怪的东西了,比如

1 MB = 2^10 KB = 2^20 B;

说白了,兆只是一个字,一个符号而已,它在不同的场合被人们赋予了不同的含义,《五经算术》中提到的“下数”、“中数”、“上数”指的便是不同的计数方法,如同二进制、八进制、十进制一般,如果你开心的话,还可以自己用二十六个英文字母定义出26进制,甚至各种花式进制法进行计数。
但如果大家都这样做的话,问题就来了。大家可以从上文的引用看到,单单是兆这一个计数法的多种定义就足以使很多人晕头转向,更别提大家人手一种进制的情况,所以我们自然科学界统一约定俗成十进制为主流进制,而计算机科学界则约定二进制(事实上八进制、十六进制等二的幂方进制是很容易转换为二进制的)为主流进制。

而在中国大陆,规定1兆 = 1百万 = 1 * 10^6;


百度百科

于是我们看到1Mbps = ?B/s的时候,就可以很开心的进行计算了,So easy!

1 Mbps = 1 Mb/s = 2^10 Kb/s = 2^20 b/s = 1048576 b/s

嘿嘿,如果你这样算,那么就正好错了。可要看清楚了,人家问的是1Mbps = ?B/s,而不是1Mbps = ?b/s.

一个大写一个小写,失之毫厘差之千里!

计算机中字节的单词是Byte,而二进制信息单位写作bit,它们的缩写一个是大写字母一个是小写字母,而1B = 8b;(怎么办,我也很绝望啊!)

所以上面的问题我们应该这样计算

1 Mbps = 1 Mb/s = 2^20 b/s = (2^20 / 8) B/s = 131072 B/s

这次肯定对了吧,没问题了,我将b/s换算成B/s了。为了稳妥起见,上网看看大家都是怎么说的,ok!大家好像都是这样说的。

于是我带着学到的新知识去看了这样一道题:

image.png

信心满满地给出计算过程和结果:

m = (980000 B) / 1000 + 20 B = 1000 B;
t = m / (100 Mbps)
  = (1000 B) / (100 Mbps)
  = (1000 B) / (100 * 131072 B/s)
  = (10 / 131072) s;
T = (1000 + 2) * t = 1002 * (10 / 131072) s ~= 76.45 ms;

抱歉,又错了……

当我算到这个地方的时候内心是崩溃的,我记得我思考了好久人生,我觉得我不适合学习,哦呸,我不适合做人!

我们来看看标准答案:

m = (980000 B) / 1000 + 20 B = 1000 B;
t = m / (100 Mbps)
  = (1000 B) / (100 Mbps)
  = (1000 B) / (100000000 b/s)
  = (8 / 100000) s;
T = (1000 + 2) * t = 1002 * (8 / 100000) s = 80.16 ms;

谁又能告诉一下我这是肿么一回事?

标准答案当中

1 Mbps = 10^3 Kb/s = 10^6 b/s = (10^6 / 8) B/s = 125000 B/s

WTF!!!我们说好的

1 Mbps = 2^10 Kb/s = 2^20 b/s = (2^20 / 8) B/s = 131072 B/s呢?

最后还要感谢亲爱的度娘为我指点了迷津:

1Mbps=1 000 000bps,但是在实际利用中不可能实现,实际的可得到的速率只是114688bps。
Mbps是Million bits per second的缩写,Mbps=Mbit/s即兆比特每秒 ,它的意思是时间内传输数据的平均比特数,其单位是比特每秒(bps),或千比特每秒(Kbps),或兆比特每秒(Mbps)。
换算单位关系为:1Kbps=1024bps,1Mbps=1024*1024bps (有时为了计算简单记作1Kbps=1000bps,1Mbps=1000000bps)。数据传输速率反映了终端设备之间的信息处理能力,它是一段时间的平均值,数值越大,说明速度越快。
——摘自百度知道

这还能让本宝宝说什么好呢!好的,计算简单……的确简单……