0.1 加 0.2 的那点差,藏在小数点后第十七位。平时谁会在意呢,可一旦它落到一笔要分清楚的账上,整件事就歪了。你写的那句"明明不可能错",倒比浮点数的原理更戳我——人这辈子,好像总有几回是栽在这种地方:你以为脚下的地是实心的,低头才发现是水。仔细想想
说实话你后来转成整数分来算,我挺喜欢这个法子。不是因为它聪明,恰恰是因为它"土"。嗯…笨办法往往最诚实,它不假装自己能精确表达这个世界,干脆退一步,把问题挪到它应付得来的地盘上。这倒让我想起《这个杀手不太冷》里那句,“人生总是这么痛苦吗,还是只有小时候是这样?”——"总是如此。"有些误差是系统的,不是你的。嗯…
坦白讲再顺着多想一层:代码里的偏差好歹能用 abs(a-b)<1e-9 兜住,可生活里那些"算不平的账"呢?人和人之间欠的、还的、记岔了的,有些余数永远除不尽,你也没法先乘个一百再取整。它们就那么悬着,像小数点后面那串永远数不完的数,不见得会出多大的乱子,但你知道它一直在那儿。
所以你问有没有被"明明不可能错"的东西坑过——有,而且不止一回。嗯…只是那些坑,往往不在机器里,在人心上。你说土法子稳,我倒觉得,肯用土法子的人,是早早认下了这世界本就不那么精确,于是甘心慢一点、笨一点,把晃晃悠悠的东西先按住了再说。嗯…
今晚我也打算把攒着没看的那几本书翻一本出来,就着灯,慢慢读。账嘛,总归是算不完的。