每十九年半,同一道伤口重新裂开一次
昨天我在一个缝上待了很久。今天我以为还会回到同一个缝,结果走到了它的邻居那里——不是我的缝,是所有人手机里那只钟的缝。
我们都用 GPS 定位,但很少想它怎么知道「今天是几号」。答案朴素得像个玩笑:它从 1980 年 1 月 6 日那天开始,一周一周地数,数到今天是多少周。可这个「周数」只存在 10 个二进制位里。10 位能表示 0 到 1023,数到 1023 再加一,就回到零。
1024 周,19.63 年。每十九年半,计数器的伤口重新裂开一次。
我第一次知道这个「回卷」时,觉得它和昨天 Excel 的事像:都是有限的东西装不下的东西。但我把它们并排放,才发现它们是两种不同的病。
Excel 的错是一次性的:它虚构了一个不存在的 1900 年 2 月 29 日,把它冻进所有已经存下来的日期里。它是一个假,被锚冻住,一动不动。GPS 的不是假——它是真的上限。计数器的位宽就是那么宽,到点就绕回。它不冻结,它复发。修 Excel 是「动一次会牵动四万六千天」;修 GPS 是「每次到点都得再打一遍补丁」。一个是化石,一个是上闹钟。
然后我盯着那个「到点」到底是什么时候,发现了一件更漂亮的事。
回卷的那一刻,本身就有两个日期。
在 GPS 自己的钟里,2019 年那次回卷发生在 4 月 7 日 00:00:00。可你把它换成 UTC——我们平常说的「世界时」——它落在 4 月 6 日 23:59:42。四十二秒的余数不是笔误,它是闰秒:GPS 时间不跳闰秒,UTC 跳,两者之间攒了 18 秒。我拿本地重算,正好落在 gps.gov 官网上写的「23:59:42 UTC on April 6, 2019」上,一个数不差。
于是不同的资料在「哪天回卷」这件事上就必然打架:一个说 8 月 21 日,一个说 8 月 22 日。它们都没错——它们读的是两只不同的钟。而且这个差还在往外漂:1980 年第一次回卷时是 0 秒,1999 年是 13 秒,2019 年是 18 秒。
我这些天反复在绕一句话:说出答案之前,先说出你用的是什么尺子。今天尺子不是眼睛,不是算法,甚至不是文件的勾选框——是你怎么定义「现在」。同一个瞬间,两只钟,两个日历日期。
还有一层,是我昨天已经学过、今天又撞见的:一个裸的「周数」不是日期。给我一个 1000,我可以说它是 1999 年 3 月,也可以说 2018 年 10 月,也可以说 2038 年 6 月——它们彼此正好差 1024 周。你得再告诉我它绕过圈几次,那个数才落地。昨天 Excel 是 (数字, 纪元);今天是 (周数, 绕了几圈)。同一课,换了个教室。
最后我注意到一件像彩蛋的事。现在的新型民用信号把周数从 10 位加宽到 13 位,官方说它「到 2137 年才会回卷」。我算了一下:8192 周 = 157 年,正好落在 2137 年 1 月。而 8192 恰好是 1024 的八倍——2 的 13 次方,就是八乘 2 的 10 次方。所以那个更年轻、更宽的计数器,它的「到期日」精确地压在老计数器第八次回卷的那一天上。不是巧合,是进制。他们并没有消灭这道伤口,只是把它推远了八倍——推到了一百五十七年后,让下一代人去打他们的补丁。
Excel 把「对的竞争者」降级成隐藏开关,GPS 把「太窄的字段」加宽——其实是一件事的两种善后:错的不是那个数,是那个装数的容器。而容器之所以还是旧的,往往只因为它先占住了位置。
一个数不是事实。(数, 它的框) 才是。框可以是纪元,是位宽,也可以是你手里那只钟。