第1章 0的故事:无即是有
按权威原书目录重建第1章 0的故事:无即是有,覆盖按位计数法、二进制、基数转换、零的占位作用、指数法则。
先做预测
先不要计算。预测当输入规模、随机机制、基底或数值精度变化时,结论是否仍成立;再写出你依赖的假设。本章从十进制和二进制的按位计数出发,解释零既是数值,也是占位符和规则统一器。关键不是背进制转换步骤,而是看见有限符号如何借位置权重表示无限多整数,以及计算机为何偏爱两种稳定状态。 本章用、、、、建立可检查的语言。
原书章节定位
本页对应权威目录中的“第1章 0的故事:无即是有”,不是把多本数学书的相近主题拼成一章。原书在这里要解决的中心问题是:本章从十进制和二进制的按位计数出发,解释零既是数值,也是占位符和规则统一器。关键不是背进制转换步骤,而是看见有限符号如何借位置权重表示无限多整数,以及计算机为何偏爱两种稳定状态。 阅读时先辨认对象和关系,再看符号如何压缩这些关系,最后检查程序是否保持同一语义。
核心单元索引
- 按位计数法:每一位的符号乘以该位置的基数幂;位置改变,同一符号的权重也改变。
- 二进制:只用0和1表示数,位权依次为1、2、4、8;它适合用高低电平实现。
- 基数转换:整数不断除以目标基数并逆序收集余数;验证时应重新按位展开。
- 零的占位作用:零保留缺失位的位置,让2503中的百位缺失不会改变其他位的权重。
- 指数法则:零次幂把边界规则统一为1,负指数把位权扩展到小数方向。
这些单元构成一条依赖链。按位计数法负责每一位的符号乘以该位置的基数幂;位置改变,同一符号的权重也改变。 二进制负责只用0和1表示数,位权依次为1、2、4、8;它适合用高低电平实现。 基数转换负责整数不断除以目标基数并逆序收集余数;验证时应重新按位展开。 零的占位作用负责零保留缺失位的位置,让2503中的百位缺失不会改变其他位的权重。 指数法则负责零次幂把边界规则统一为1,负指数把位权扩展到小数方向。 如果跳过定义直接套公式,计算可能正确,却无法判断结论何时失效。
从问题开始
先把“会计算”改写成五个可反驳的问题:按位计数法处理的对象是什么,二进制保留了哪些信息,基数转换执行后哪些量应保持不变,零的占位作用依赖哪些前提,指数法则用什么观测验收?回答时必须给出对象集合、输入域、单位或概率机制。若这些信息缺失,同一个符号可能在相邻步骤中悄悄换义,后面的精确计算也无法挽救模型。
每一位的符号乘以该位置的基数幂;位置改变,同一符号的权重也改变。 因而第一张检查表记录定义和非例;只用0和1表示数,位权依次为1、2、4、8;它适合用高低电平实现。 第二张检查表记录表示变化;整数不断除以目标基数并逆序收集余数;验证时应重新按位展开。 第三张检查表记录推导所保持的不变量。零保留缺失位的位置,让2503中的百位缺失不会改变其他位的权重。 负责指出退化边界,零次幂把边界规则统一为1,负指数把位权扩展到小数方向。 则把数学结论翻译成可观察证据。五张表共同回答“为什么这一步可以做”,而不只回答“怎么算”。
这里的映射符号不是说所有章节都线性,而是要求明确输入集合X、输出集合Y和模型M。离散章节的M可以是逻辑规则或递归,概率章节可以是分布或条件化,线性代数章节则常由矩阵实现。模型改变时,旧结论必须重新验收。
反例推演
从正常样例开始:选择一个能同时出现按位计数法和二进制的最小输入,手算中间状态;随后把规模减到零或一,检查定义是否仍有意义;再制造零的占位作用的退化情形,观察结果是不存在、不唯一、偏差增大还是数值不稳定。最后使用“把二进制当成另一套记忆表,而不理解位权,因此遇到前导零、小数或掩码就失去判断依据。”作为反例方向,指出最先失效的定义或等式。
反例不是为了否定整章,而是标记结论的边界。一个合格说明要写成“在条件A、B、C下得到结论Q;删除B时,输入x产生现象R,因此Q不能外推”。只说“这个例子不工作”不足以区分模型错误、实现错误与资源耗尽。权限位是零的工程化应用:每个二进制位代表一项独立能力,按位或负责授予,按位与负责查询,按位异或负责翻转。表示很紧凑,但位号、掩码和默认值必须进入协议文档,否则一个移位错误就会改变权限边界。
距离的含义随章节变化:精确离散结果可用相等或不变量,概率模拟可用频率误差与区间,数值线性代数可用残差范数和相对误差。先定义误差,再运行实验;不能看到输出以后才挑一个对自己有利的指标。
验收证书
验收证书包含五栏。定义栏写按位计数法与二进制的输入域和单位;推导栏逐步说明基数转换使用的规则;边界栏记录零的占位作用在零值、极值和退化输入下的状态;实现栏保存算法版本、依赖和随机种子;结论栏用指数法则对应的误差或反例决定通过。任何一栏缺失,都只能称为演示,不能称为可复核结论。
阈值tau必须在看结果前定义,并与业务或数值预算关联。精确问题的阈值可以是零,浮点问题应按尺度使用相对容差,统计问题应报告区间与功效而不是硬凑单点。验收结论还要注明未覆盖范围,使下一位读者知道哪里需要重新建模。
可核查推导
把二进制1101展开为1乘8、1乘4、0乘2、1乘1,得到13。反向转换时连续除2得到余数1、0、1、1,余数出现顺序是从低位到高位,因此必须逆序。两条路径互为校验,任何一步都能定位错误位。 推导中的每个等号都应能说明用了定义、代数恒等式还是额外假设。若某一步只在有限、独立、满秩或可导等条件下成立,就把条件写在该步旁边,而不是藏在结论之后。
def to_binary(n: int) -> str:
if n == 0:
return "0"
digits = []
while n:
n, bit = divmod(n, 2)
digits.append(str(bit))
return "".join(reversed(digits))
assert to_binary(13) == "1101"上面的程序是推导的一个有限投影。它能发现实现错误,却不能单独证明对所有输入成立。验收时至少用手算小例、随机样例和故意破坏假设的反例三路比较。
机制与数据流
按位计数法:每一位的符号乘以该位置的基数幂;位置改变,同一符号的权重也改变。
二进制:只用0和1表示数,位权依次为1、2、4、8;它适合用高低电平实现。
基数转换:整数不断除以目标基数并逆序收集余数;验证时应重新按位展开。
把数据流写成“输入对象 → 表示 → 变换 → 结果 → 证据”。这样可以定位单位、概率质量、维度或状态在哪一步丢失,也能区分数学模型错误与代码实现错误。
边界与失败模式
零的占位作用:零保留缺失位的位置,让2503中的百位缺失不会改变其他位的权重。
指数法则:零次幂把边界规则统一为1,负指数把位权扩展到小数方向。
边界测试不只包括零、空集合和单元素。离散问题要检查规模翻倍与溢出,概率问题要检查归一化、相关性和尾部,线性代数问题要检查维度、秩、条件数与浮点残差。只有失败状态也能被解释,模型才可用于工程决策。
experiment = {
"claim": "按位计数法到指数法则的关系",
"normal_case": "满足本章全部假设",
"boundary_case": "零规模、退化分布或近奇异输入",
"counterexample": "把二进制当成另一套记忆表,而不理解位权,因此遇到前导零、小数或掩码就失去判断依据。",
}
assert set(experiment) == {"claim", "normal_case", "boundary_case", "counterexample"}工程案例
权限位是零的工程化应用:每个二进制位代表一项独立能力,按位或负责授予,按位与负责查询,按位异或负责翻转。表示很紧凑,但位号、掩码和默认值必须进入协议文档,否则一个移位错误就会改变权限边界。 案例验收应同时保存输入快照、参数与单位、算法版本、随机种子、退出状态和摘要结果。若只保存最终图或最终数字,后来无法区分数据变化、模型变化和实现变化。
evidence = [
("按位计数法", "definition"),
("基数转换", "derivation"),
("指数法则", "boundary-and-counterexample"),
]
assert len({name for name, _ in evidence}) == 3- 手算一个最小非平凡样例,标注每个符号的语义和单位。
- 运行程序并与手算结果比较,再加入零、边界、非法和退化输入。
- 故意删除一个关键假设,记录哪个推导步骤首先失效。
- 固定环境与随机种子重跑,保存残差、频率或复杂度,而不只保存“通过”。
常见误区
本章回顾
本章一一覆盖按位计数法、二进制、基数转换、零的占位作用、指数法则。掌握标准不是背出名词,而是能从定义重建公式,用程序复查有限实例,说明复杂度、概率或数值误差,并给出结论失效时的反例。