笔记7-《程序员的数学》0 的作用与历史进程  

目录
  1. 第一章 0 的故事–无即是有
  2. 0 的作用:占位
  3. 0 的作用:统一标准,简化规则
  4. 日常生活中的 0
  5. 人类的极限和构造的发现

第一章 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 + 200
  • 0 占着一个位置,保证高位的数字不错位

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
  • 本书的主旨:把大问题分解成小「单元」,大程序拆成模块也是同一招

123.8k