第一章 0 的故事–无即是有
0 所起的作用
- 占位、统一标准简化规则、日常生活中的 0
人类的极限和构造的发现
- 重温历史进程、为了超越人类的极限
0 的作用:占位
2503 里十位的 0 表示「没有」,可这个 0 不能省,省掉写成 253 就成了另一个数
#ruby
# 各位按 10 的幂展开, 0 那项贡献 0, 但位置不能省
def expand(n)
n.to_s.chars.reverse.each_with_index.map { |d, i| d.to_i * 10 ** i }
end
puts expand(2503).join(" + ") # 3 + 0 + 500 + 2000
puts expand(2503).sum # 2503
puts expand(253).join(" + ") # 3 + 50 + 2000 占着一个位置,保证高位的数字不错位
0 的作用:统一标准,简化规则
把 1 特意写成 10^0,各个数位就能统一成 a_i x 10^i
少了 0,就得给「1」单开一条规则
#ruby
# 指数每减 1, 数值变为原来的 10 分之 1, 于是 10^0 = 1
puts 10 ** 0 # 1
puts 2 ** 0 # 1
puts 10 ** -1 # 0.1
puts 2 ** -1 # 0.5
日常生活中的 0
没有计划的计划:日程表里把「预计不安排计划」当成 0 先占位
没有药效的药:每 4 天停 1 次服药,换成每天 1 粒,其中 1 粒是假胶囊
#ruby
# 用假胶囊占位, 就不用判断今天是服药日还是停药日
(1..4).each { |d| puts "第#{d}天:#{d % 4 == 0 ? '假胶囊' : '真胶囊'}" }
# 第1天:真胶囊
# 第2天:真胶囊
# 第3天:真胶囊
# 第4天:假胶囊口服避孕药同理:28 粒一组,7 粒是安慰剂
人类的极限和构造的发现
重温历史进程
文明 计数法 要点 古埃及 5 进制 + 10 进制混合 记在纸莎草纸上,没有 0 巴比伦 10 进制 + 60 进制混合 棱形记号表示 1~59,靠位置表示 60 的数位 古希腊 无 数字里注入哲学真理 玛雅 20 进制 数数从 0 开始 罗马 5 进制 + 10 进制混用 V、X、L、C、D、M 印度 10 进制 引进按位计数法,认定 0 也是数字 现在的 1 小时 60 分钟来自巴比伦的 60 进制
粘土板不好写多种记号,这个限制催生了按位计数法
我们用的 0~9 叫阿拉伯数字,不叫印度数字
为了超越人类的极限
- 只用 1 排成一排,数越大越难处理,1111111111 和 11111111111 谁大看得出
- 先贤造出「单元」:V 比 IIIII 好比,XII 比 111111111111 好比
#ruby
# 排一排 1 长度就失控, 按位计数法位数很少
[11, 111, 1111].each do |n|
puts "#{n}: 排一排要 #{n} 个字符, 按位计数法只要 #{n.to_s.size} 个字符"
end
# 再往上得靠指数: 1000000000000 = 10^12, 10000000000000 = 10^13本书的主旨:把大问题分解成小「单元」,大程序拆成模块也是同一招