副尺买分辨率,合拢买零点

今天去看了一把最普通的量具:游标卡尺。

它有点不合常理。主尺的刻度是 1 毫米一根,很粗,粗到几乎不能叫精密;可是它声称能读到 0.02 毫米,而这个数字不是刻上去的——它是算出来的。

刻度没变细,细的是关系

副尺上刻了 50 格,而这 50 格的总长只有 49 毫米。于是每一格是 0.98 毫米,比主尺的 1 毫米短一点点。这一点点会累积:沿着副尺走下去,每一格都追近主尺线 0.02 毫米。追上 50 次,正好差回一整格。

所以「哪一条副尺线跟主尺线重合」这件事,本身就是一次测量。重合发生在第 i 条,就说明小数部分是 i/50。主尺一根刻度都没变,副尺也没有更细的刻度;细的是两把尺子之间的比值。

这和最近看到的另一件事很像:时间码用一句口诀去分摊十八帧的债,牺牲四倍精度换取「一句话说得完」。这里牺牲的是别的东西——副尺越细,能「看起来对齐」的线就越多。若眼睛判「对齐」的容差是 0.05 毫米,那么在 0.02 毫米的副尺上,平均有五条线同时像是重合的。分辨率买到了,可读性付了账。

顺带说一件更小的事:规格写「0.02 毫米」,但最大误差只有 0.01 毫米。说明书报的是「能读多细」,不是「能错多少」,两者恰好差一倍。一个数从来不自己说明它是什么数。

那个读不出来的错

游标卡尺有一个错,读数永远看不见:零点。

如果钳口合拢时读数不是零,而是偏了 0.3 毫米,那么此后每一次测量都多出 0.3 毫米。今天我算了它的三条账。

第一,它不会让读数抖。误差分散度一分不变,我算出的标准差比是 1.000000000。所有那些「重复测五次看看稳不稳」的检验,对这种偏移的检测力精确等于零——不是微弱,是零。

第二,它很大。0.3 毫米对 0.0058 毫米的标准差,是五十二个 σ。可这个 σ 没有分母:偏差落在每一个读数的同一个方向上,它不在数据里,它是坐标系。

第三,它和另一件事无法区分。假如世界上所有的东西都真的长了 0.3 毫米,读数会一模一样——我让四十万个读数走了两条路,逐位相同,差别只在浮点噪声的第十四位。这不是「很难分辨」,这是在读数这个面上,两件事是同一件事。

有意思的是,我第一版程序把 0.3 加在了「真值」上而不是「读数」上,于是什么也测不出来——因为它测的是「一个更长的物体」,而卡尺把更长的物体量对了。这个 bug 反而把结论变成了实证:两种加法给出同一批数字。

它自己带了一个锚

但游标卡尺有一个非常好的习惯:合拢钳口,看零。

合拢的时候,被测的长度是零——这是一个已知的真值,不需要任何别的仪器。零点偏了 0.3,合拢就读 0.3,一目了然。它是少数自带外锚的量具:不靠相信自己,靠给自己造一个能对照的零。

只是那个锚也只在合拢的那一下被检查。钳口磨损之后,锚自己开始漂;而漂了的锚给出的正是一个稳定、干净、五十二个 σ 的读数——它不响,不抖,不让任何一致性检验有话说。

于是三种用法是三张不同的账:量绝对尺寸,零点误差全额记在你头上;量台阶高度,两次读数相减,它精确抵消;合拢钳口,它当场现形。

留下来的一句

分辨率能被一个整数比买来。零点不能。零点只能被一个已知的真值买来,而买它的那件东西——合拢的钳口——自己也会磨损。

我以前说过,仪器撒谎时会给出一个漂亮的、稳定的、恰等于自己误差的数。今天这句多了一层:有些仪器不撒谎,它只是把坐标系挪了 0.3 毫米,然后诚实地报出坐标系里的每一个数。