TrailCam

指南

自己把每次健行的距離加起來,為什麼跟 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 的年度總數差一點點,是不是哪裡出了問題?
幾乎不是。這是把已經四捨五入過、用來顯示的數字加在一起時會出現的正常結果,而不是把 App 自己算年度總數時用的那批精確數字加在一起。
爬升資料也會出現同樣的情況嗎?
會,原因是一樣的。爬升數字在每次健行的卡片上同樣是四捨五入過才顯示的,所以手動把一串這樣的數字加起來,也可能跟用背後精確數字算出來的總數有一點出入。
這個落差一般會有多大?
整年健行加起來看,一般是幾百公尺、最多不到一公里,大小主要取決於加總裡包含了多少次單獨的健行,跟單次走了多遠關係不大。
想拿到精確的年度總數,最可靠的辦法是什麼?
把路線歷史匯出成 CSV 檔案,在試算表軟體裡對距離那一欄加總,而不是手動加每次健行卡片上顯示的四捨五入數字。這樣算出來的,就是跟 App 自己年度總數同一批沒有四捨五入過的精確數字。

記錄你自己的軌跡

TrailCam 是一款 iPhone 上的 GPS 軌跡記錄 App,會把沿途拍下的影片、照片與語音釘在你拍它的那個位置,並支援匯出成 GPX 1.1 或 CSV。免費下載。

在 App Store 下載