时辰边界上的那 16 分钟
我们原来的命宫起法漏了一项改正:均时差。19 个验证样本全对,却对它有盲区——最小裕度 15.6 分钟,比均时差的全年极值 16.4 分钟还窄。最后是靠扫参照实现在哪一分钟跳格定案的。
排一张中国星命盘,最先要定下来的是命宫。命宫定在哪个位置,取决于出生的时辰;时辰变了,十二宫的顺序就跟着变,每颗星落在哪一宫也全不一样。换句话说,把出生时刻换成时辰这一步一旦弄错,整张盘就是另一个人的。
我们原来的做法是这样:先按出生地的经度把钟面时改正成当地平太阳时,再按两小时一格切成十二个时辰。这个做法漏了一项改正,就是均时差。
均时差来自两件事叠在一起。地球绕太阳的轨道是椭圆,近日点附近走得快、远日点附近走得慢;黄道又和天赤道斜着相交。两件事合起来,真太阳日长短不等,一年累积下来,真太阳时和平太阳时能差出半个小时:十一月上旬偏到正的最大,约 +16 分半;二月中旬偏到负的最大,约 −14 分。也就是说,拿一口走时均匀的钟去量「太阳每天什么时候过中天」,量出来的时刻一年里会前后晃荡半个钟头。
十六分钟听起来不多。可它压在时辰边界上,事情就不一样了:时辰的分界落在真太阳时的奇数点钟上(23 点、1 点、3 点……),一个人的出生时刻只要落在这道边界前后十六分钟之内,两种做法就会把他推进不同的宫。我们全天扫了一遍,如果出生时刻在一天里是均匀的,大约 6% 会因为这个换一格。这个比例和城市几乎无关,因为时辰边界一天恒定出现十二次,换格的分钟数差不多就是十二乘以均时差的绝对值;它只随季节变:四月中旬均时差过零,比例接近 0,十月中旬最大,能到 12%。
命宫一动,官禄、财帛、夫妻全都跟着挪位。6% 不是可以忽略的数字:按均匀分布估,每一百个人里就有六个被我们排错了一格。
这个错活了很久,它的活法值得写下来。
我们有一套验证集:19 个出生样本,把我们排出来的盘和第三方排盘接口逐项对。19 个全对。我们一度把 19/19 当成「这件事已经验完了」的证据。它没有这个分量。
这 19 个样本里,离最近的时辰边界最近的一个,裕度是 15.6 分钟。那是北京的两个样本,钟面 09:30 和 15:30:北京在 116.4 度,而钟面时锚在 120 度,一度四分钟,差出来 14.4 分钟,所以钟面 09:30 对应的当地平太阳时是 09:15.6,离 09:00 那道边界只剩 15.6 分钟。而均时差的全年极值是 16.4 分钟,比 15.6 还大一点。
也就是说,这 19 个样本对均时差是瞎的。它们没出错,靠的是取样上的巧合:把每个样本当天的均时差和它自己的裕度放在一起看,没有一个的均时差大于裕度。离边界最近的那两个(15.6 分钟),恰好落在均时差只有 3 分钟出头的日子;而均时差能到十几分钟的那些样本,出生时刻又都取在离边界足够远的地方。真正危险的组合,这 19 个样本里一次都没出现。
我们当时写的不是这个。我们当时写的是「构造上不可能被翻转」。这是把「没观测到」当成了「不存在」。这句错话后来散在五个地方:待办清单一条、代码注释两处、一个测试、一份复核记录。都得回头改。
但让这个错活得这么久的,是另一件事:我们一开始查错了量。
要判断时辰转换对不对,得看命宫。我们当年却是拿星曜的黄经去看的。当时第三方排盘上有一个「真太阳时」开关,我们切换它,发现黄经纹丝不动,就以为「它也不在意时制」。这个判断错得挺彻底:黄经由世界时决定,和把钟面时换成哪一种太阳时没有关系,它本来就该不动。我们测了一个对这件事不敏感的量,看到「没有变化」,就当没事了。后来我们把这条写成了规矩:要测命宫,就别去测黄经。
命宫起法该用哪一种时制,我们没有找到直接的史料规定。所以这个问题我们没往书上问,改成去问参照实现的行为。做法是:不问它某个时刻的命宫是什么(那样只能得到「一样」或「不一样」两个答案),而是找它在哪一分钟跳格。
我们挑了两个均时差符号相反的日子。1990 年 11 月 3 日,均时差约 +16.4 分钟;1990 年 2 月 10 日,约 −14.2 分钟。这两天里,「它用平太阳时」和「它用真太阳时」两种假设预测的跳格时刻分别相差 16 分钟和 14 分钟,正好都落在可以扫到的范围里。
11 月 3 日的结果:平太阳时假设预测边界在钟面 01:14,真太阳时假设预测在 00:57。它自己跳格发生在 00:57 到 00:58 之间;我们后来用 30 秒的步长重扫了一遍,把边界钉在 00:57 到 00:58。距平太阳时的预测 16.9 分钟,距真太阳时的预测 0.4 分钟。逐点比对:平太阳时假设命中 14 次,真太阳时假设 31 次全中。
2 月 10 日均时差是负的,两边的关系反过来。平太阳时假设预测边界在 01:14,真太阳时假设在 01:28,它跳在 01:28 到 01:29 之间。距平太阳时 14.1 分钟,距真太阳时 0.1 分钟。逐点命中 14 对 28,28 个全中。
挑符号相反的两天,是为了排除「只是偏向某一侧」这种可能:如果它只是习惯性地早一点或晚一点,两个日期的误差方向应该一致;而实测它每次都贴着真太阳时的预测走。这两次,它的跳格都落在真太阳时的奇数整点上。
顺带一件事。在那两次边界扫描里,我们得出的宫头和参照实现给的宫头,差值只有 0.001 到 0.011 度。
所以我们把这一项补上了:时辰转换改用当地真太阳时,也就是经度改正加均时差。平太阳时那套没删,留着当对照组;实测到的两个跳格时刻,我们做成了固定检查,以后改代码再碰这里就会报警。
还要说清楚一点:这个错不影响上一篇那个 0.054 度。那一步读的是参照实现自己给出的十二个宫头,和我们的时制无关。受影响的是「命宫落在哪一格」,不是「宫界在哪儿」。
不过有几件事我们还没弄清楚。
最要紧的一件是:上面那个结论,我们的证据是参照实现的行为,不是史料。命宫起法该用哪一种时制,我们没有找到直接的史料规定,所以「用真太阳时」是我们采的口径,它写在盘的口径块里,用户可以看见。这不是一条我们从古书里读出来的规矩。
其次是覆盖面。我们只测了两个日期,虽然挑的是均时差的两个极值,但「它的边界在真太阳时的奇数整点上」这句话,严格说只有这两天撑得住。而且两次扫的都是凌晨一点那道边界;夜里十一点那道(它同时还是换日的那道)我们没有扫。全年扫描也没做。
最后是那个 6% 的前提。它假设出生时刻在一天里均匀分布,而真实的出生时刻不均匀——医院的排班、剖宫产的时间安排都会让它偏向白天。所以 6% 只能当量级参考,不能当成某一张盘的换格概率。这和上一篇那个 4.78% 是同一类情况:都是测度,不是真实分布下的频率。
如果你发现我们对这件事的解读有误,或者知道我们漏掉的既有工作,欢迎告诉我们。我们会在文章里更正并注明。