skip to content
鰭狀漏斗

在 Excel 做大數加法

/ 閱讀時間 5 分鐘

吸血鬼馬上死在 2020 年曾經舉辦過一次人氣投票,該次人氣投票採用「自我申告」制度,只要在明信片上註明角色名字與想要給的票數,你就可以給角色投明信片上記載的票數。

最後結果的總得票數是:

20 澗 2 溝 400 億 3187 萬 2259 無量大數 1158 不可思議 9994 那由他 7923 阿僧祇 5925 恆河沙 3394 極 17 載 227 正 5013 澗 7636 溝 3129 穰 701 秭 8436 垓 3237 京 5482 兆 1365 億 2080 萬 2682 票

如果以科學記號表示的話是 2×101052 \times 10^{105}

據漫畫所述,因為 Excel 儲存格只能儲存最多 15 位數的數字,超過的話 Excel 會將 15 位數後的數字都記為 0,這樣會造成計算誤差,所以票數統計都是徒手計算的。他們把明信片依照票數的數量級分類,同類的明信片票數先相加,再將每一類的票數相加,得到一個角色的總票數。

我們能不能用電腦輔助,讓整個計票流程更輕鬆呢?我們或許可以在 Excel 仿照手算的方法計算。因為儲存格放不下這麼大的數字,我們把這種很大的數字每 10 個位數放一個儲存格:

21-30 位11-20 位1-10 位
99999999999999999999

這樣雖然放的下了,但是這樣子表示的數字要怎麽相加呢?如果直接將每一行分別直接加總會遇到一個問題,就是加起來可能會超過 10 位數,但是多出來的應該要進位到左邊那一格才正確:

21-30 位11-20 位1-10 位
數字 1:99999999999999999999
數字 2:99999999999999999999
行加總:1999999999819999999998
預期結果:199999999999999999998

要如何才能正確進位呢?我們要用到這兩個函數:QUOTIENTMOD

  • QUOTIENT(a,b):回傳 a / b 的商,也就是除法結果的整數部分。
  • MOD(a,b):回傳 a / b 的餘數。

我先列出表格,下面再來解釋:

ABC
121-30 位11-20 位1-10 位
299999999999999999999
399999999999999999999
41
=QUOTIENT(B5,D1)
1
=QUOTIENT(C5,D1)
0
51
=SUM(A2:A4)
19999999999
=SUM(B2:B4)
19999999998
=SUM(C2:C4)
61
=MOD(A5,D1)
9999999999
=MOD(B5,D1)
9999999998
=MOD(C5,D1)

下面是上面表格每一列的意義:

  1. 標示這一行是哪一位數
  2. 數字 1
  3. 數字 2
  4. 進位
  5. 加總
  6. 最終結果

為了讓表格不要那麼寬,我在 D1 儲存格放了 10000000000,這樣我就不用在上面的表格打上這個數字。

第 2 與第 3 列是剛剛的兩個數字,第 5 列是行加總。第 4 列則是表示進位,右邊行的行加總超過 10 位數的部分會在這邊列出,表示該進位的數字。第 5 列的行加總是有加上進位數字的,不然結果會不正確。

你可能會問這樣進位的數字不就重複算兩次了嗎?其實不會,在第 6 列的結果我們會取餘數,結果最後只會剩下 10 位數,已經進位的超過 10 位的位數都會被去掉,所以不會重複算兩次。

另外一個可能的問題是第 5 列的加總有沒有可能超過 15 位數,導致無法正常計算?是有可能的,如果要加總的數字太多,多到大概十萬個左右,就會超過 15 位數。這時候可以讓一個儲存格不要放那麼多位數,讓加總不要超過 15 位數。

使用仿照加法直式計算的方法,我們成功在 Excel 做了大數的加法運算,統計票數再也不用用手算了。

參考資料