自己把每次徒步的距离加起来,为什么跟 App 给的年度总数对不上?
这几乎从来不是真的算错了,而是四舍五入在一个大家平时不会留意的地方悄悄起作用。每次徒步的卡片上显示的都是一个干净的数字,比如 5.2 公里,但这只是 App 实际记下的、更精确的数字四舍五入之后的样子。把十几个这样四舍五入过的数字手动加起来,等于是把十几个各自都有一点点偏差的近似值加在一起。App 自己算年度总数的时候不是这么算的——它直接把每次徒步四舍五入之前的精确距离加总,跳过了这一步。
简单说
每次徒步卡片上的那个数字,在你看到它之前就已经被四舍五入过了——通常保留一位小数。把一串这样的数字手动加起来,途中每一次四舍五入产生的小误差都会带进最终的总和里。App 自己的年度总数不走这条路:它把每次徒步没有四舍五入过的精确距离直接加总,只在最后显示的时候才四舍五入一次。"先四舍五入再加"和"先加再四舍五入",运算顺序不一样,得数自然不一定完全一致,这就是两个数对不上的全部原因。
卡片上显示的距离到底是什么
GPS 轨迹本来就不是按整齐的数字测出来的。它是从一长串坐标点算出来的,距离是把相邻两点之间的直线间隔一段一段量出来,再全部加在一起。算出来的结果比一张卡片上随便一瞥所需要的精度高得多——更接近 5.187 公里,而不是 5.2 公里。把它四舍五入到一位小数不是偷懒也不是算错,只是给随手一看的场合配上刚刚好的精度——多留一位小数只会让卡片更乱,看的人也用不上那多出来的一位数字。
数字显示出来被四舍五入了,不代表精确的原始数字就此消失。那次徒步背后仍然存着精确的数字,四舍五入只发生在显示的那一刻,不会动到底层数据本身。
十几个小误差凑在一起,为什么不会正好互相抵消
四舍五入到一位小数,任何一个数最多也就往上或往下挪动半个最小单位——也就是 0.025 公里左右。直觉上会觉得,只要徒步次数够多,往上凑整和往下凑整应该差不多一样多,平均下来该趋近于零。实际情况确实会接近这个理想值,但很少正好落在零上,跟连续抛十几次硬币很少正好一半正面一半反面是一个道理。这次徒步的四舍五入和下一次徒步的四舍五入基本上互不相关,所以这些小误差有一部分会互相抵消,有一部分不会,剩下的那部分累积起来,一年下来往往会留下几百米、最多不到一公里的差距——不算大,但足够让你把手动加出来的总数和 App 自己给的数字放在一起对比时,能看出明显的不一样。
差距大小跟徒步次数有关,跟走了多远没关系
这是最容易让人搞错方向的一点。这个差距其实跟单次徒步走了多远、或者一年总共走了多远,几乎没关系——五次长途徒步的一年,哪怕总距离比较短,四舍五入误差也远比五十次短途徒步的一年要小。不管一次徒步有多长,它都会给手动加总带来一次四舍五入,所以加总里包含的徒步"次数",才是最终差距大小的决定因素。一个经常走短途徒步的人,会比偶尔走几次长途的人看到更大的差距,纯粹是因为前者的总数里叠加了更多次四舍五入。
想要精确总数,而不是近似值,该怎么做
解决办法不是更小心地手动相加,而是干脆不加显示用的四舍五入数字,改加它背后的精确数字。CSV 导出会把每次记录下来的徒步的精确距离,各自列成单独一栏,直接在表格软件里对整年的数据用一个 SUM 公式求和就行——这跟怎么算出一年徒步总距离这篇里讲的方法是一样的。这样就完全绕开了四舍五入带来的差距,因为在求和之前什么都没被四舍五入过(如果最后要显示,也只会四舍五入这最后一次),表格算出来的数字,跟 App 自己算年度总数用的是同一批没有四舍五入过的精确数字。
容易搞错的地方
- 看到几百米的差距,就以为是漏了一次徒步没算,或者哪次被重复算了两遍——其实绝大多数情况下,这只是普通的四舍五入造成的,不是记录真的少了什么。
- 以为把同样四舍五入过的数字加得更仔细一点,差距就会缩小——不管加得多仔细,用四舍五入过的数字加出来的,还是一个建立在四舍五入之上的总数。差距的根源在四舍五入本身,不在加法算得细不细。
- 以为是 App 自己的年度总数四舍五入算错了——实际情况通常正好相反,年度总数用的是四舍五入之前的精确数字,反倒是每次徒步卡片上的数字,才是为了方便一眼看清而简化过的那个。
- 以为差距大小跟总距离成正比——实际上它跟加总里包含了多少次单独的徒步成正比,这也是为什么很多次短途徒步凑成的一年,差距反而可能比几次长途徒步凑成的一年更大。
TrailCam 在这里能做什么
TrailCam 在每次徒步的卡片上显示四舍五入过的距离,原因跟任何一个 App 一样——第三位小数不是随手一瞥就会去看的东西。整个路线历史导出成 CSV 的时候,每次徒步没有四舍五入过的精确距离都会各自列成一栏,这样在表格软件里加出来的年度总数,用的就是 App 自己算总数时用的那批精确数字,而不是显示用的四舍五入结果。导出功能包含在可选的 TrailCam Pro 升级里,App 本身可以免费下载。
常见问题
- 手动加出来的总数跟 App 的年度总数差一点点,是不是哪里出 bug 了?
- 几乎不是。这是把已经四舍五入过、用来显示的数字加在一起时会出现的正常结果,而不是把 App 自己算年度总数时用的那批精确数字加在一起。
- 爬升数据也会出现同样的情况吗?
- 会,原因是一样的。爬升数字在每次徒步的卡片上同样是四舍五入过再显示的,所以手动把一串这样的数字加起来,也可能跟用背后精确数字算出来的总数有一点点出入。
- 这个差距一般有多大?
- 一整年徒步加起来看,一般是几百米、最多不到一公里,具体大小主要取决于加总里包含了多少次单独的徒步,跟单次走了多远关系不大。
- 想拿到精确的年度总数,最靠谱的办法是什么?
- 把路线历史导出成 CSV 文件,在表格软件里对距离那一栏求和,而不是手动加每次徒步卡片上显示的四舍五入数字。这样算出来的,就是跟 App 自己年度总数同一批没有四舍五入过的精确数字。
记录你自己的轨迹
TrailCam 是一款 iPhone 上的 GPS 轨迹记录 App,会把沿途拍的视频、照片和语音钉在你拍下它的那个位置,并支持导出成 GPX 1.1 或 CSV。免费下载。