請從下拉選單選擇要查的項目,輸入底數 a 和指數 k,再按「計算」。答案會用「使用給定的近似值(log₁₀ 2 ≈ 0.3010 等)手算」和「實際算到最後的精確值」兩種方式顯示。
這個頁面可以做什麼
- 只要輸入底數 \(a\) 和指數 \(k\),就能馬上算出 \(2^{100}\) 這種巨大的乘方 \(a^k\) 是幾位數
- 答案用兩種方式顯示:「用題目給的 \(\log_{10} 2 \approx 0.3010\) 等近似值手算(高一課本的解題形式)」和「實際算到最後的精確位數」。還能看到和解題步驟相同流程的計算過程
- 也有用常用對數的尾數(小數部分)求最高位數字(最左邊的數字)的模式
- 像 \(0.5^{100}\) 這種小於 1 的小數的乘方,也能求出「在小數點後第幾位開始出現不為 0 的數字」
- 淺顯易懂的公式解說,以及可直接複製到 Excel、Google 試算表、Python 的公式,也都整理在這個頁面
這個計算有什麼用?
保護網路通訊的 RSA 加密,會說「2048 位元的金鑰」。2048 位元的數大約是 \(2^{2048}\) 那麼大,由 \(2048 \times \log_{10} 2 \approx 616.5\) 可知它是 617 位數。
「位元數 × 0.3010 ≈ 十進位的位數」這個換算,正是這個頁面的計算。用這個位數的估計,就能體會用暴力破解有多不切實際。
有些細菌在條件齊全時,大約每 20 分鐘分裂 1 次。假設這個速度持續 24 小時,就會分裂 72 次,細菌數從 1 個變成 \(2^{72}\) 個。由 \(72 \times 0.3010 \approx 21.7\) 可以估計是 22 位數(約 \(4.7 \times 10^{21}\) 個)。
實際上會受到養分和空間的限制而在某處停止增加,但只要用常用對數做 1 次乘法,就能知道「放著不管會增加好幾個數量級」——這就是「食物要盡快冷藏」成為鐵則的原因。
厚 0.1 mm 的紙每對折一次,厚度就變成 2 倍。假設能對折 42 次,厚度是 \(0.1 \times 2^{42}\) mm \(\approx\) 44 萬公里,超過到月球的距離(約 38 萬公里)。
實際上紙只能對折 7~8 次左右,所以這是思想實驗。即使如此,「一再變成 2 倍時位數增加得多快」,也能用 \(k \times \log_{10} 2\) 這個一次式精確預測,用數字確認和直覺的落差。
已知自然蒐集到的金額資料,最高位數字是 1 的比例約 30.1%(和 \(\log_{10} 2\) 一致),是 2 的比例約 17.6%……分布是偏斜的(班佛定律)。
人捏造的假數字容易偏離這個分布,所以會計查核和舞弊偵測的現場會用它來檢查。「最高位數字由常用對數的尾數決定」這個頁面的原理,就是這個定律的基礎。
像到太陽的距離約 1.496×10⁸ km、氫原子的大小約 1×10⁻¹⁰ m 這樣,科學上會用「10 的次方」表示太大或太小的數(科學記號)。
這個 10 的指數正是常用對數的首數,也就是「位數的感覺」本身。要練習用數量級掌握世界,沒有比天文學和化學(亞佛加厥數約 6×10²³ 等)更好的教材了。
公式與圖示
符號與用語解說
符號
| \(\log_{10} N\) | log 10 N | \(N\) 的常用對數(底數是 10 的對數),表示「10 的幾次方會等於 \(N\)」的數。log 是英文 logarithm(對數)的縮寫。 |
| \(N\) | N | 要查位數等的數,取自英文 number(數)的字首。在這個頁面就是乘方 \(a^k\)。 |
| \(a\) | a | 底數(連乘的數)。表示「固定的數」時,習慣上使用字母表前面的字母。 |
| \(k\) | k | 指數(連乘的次數)。\(2^{100}\) 的 100 就是它。 |
| \(n\) | n(小寫) | 位數。取自 number(數)的字首,常用來表示個數或位數。 |
| \(10^n\) | 10 的 n 次方 | 10 連乘 \(n\) 次的數,1 後面接 \(n\) 個 0(\(10^3 = 1000\)),是 \(n+1\) 位數中最小的數。 |
| \(f\) | f | 常用對數的尾數(小數部分),取自英文 fractional part 的字首。最高位數字只由這個 \(f\) 決定。 |
| \(d\) | d | 最高位數字(最左邊的數字),取自英文 digit(數字)的字首。 |
| \(m\) | m | 「在小數點後第 \(m\) 位開始出現不為 0 的數字」時的位置編號,表示小於 1 的數「有多小」。 |
| \([x]\) | 高斯符號 | 不超過 \(x\) 的最大整數(整數部分)。台灣的高中用高斯符號 \([x]\),大學以後也寫成地板函數 \(\lfloor x \rfloor\)。負數要特別注意:\([-30.10] = -31\)。 |
用語
| 常用對數 | 底數是 10 的對數 \(\log_{10} x\)。表示「10 的幾次方會等於 \(x\)」,特色是和十進位的位數直接相關。台灣在高一學到。 |
| 對數 | 表示「底數的幾次方會等於真數」的數,正好是乘方的逆運算。 |
| 真數 | 對數裡面的數,也就是 \(\log_{10} N\) 的 \(N\),只能用大於 0 的數。 |
| 底數 | 乘方 \(a^k\) 或對數 \(\log_{a} x\) 的「基底的數」\(a\)。這個頁面的輸入欄「底數 a」就是它。常用對數是底數為 10 的對數。 |
| 位數 | 寫出整數時排列的數字個數。1024 是 4 位數。用數學的說法就是「\(10^{n-1}\) 以上、小於 \(10^n\) 的整數是 \(n\) 位數」。 |
| 最高位數字 | 寫出數時最左邊那一位的數字。1024 的最高位數字是 1,可以由常用對數的尾數求出。 |
| 乘方 (次方) |
把同一個數連乘好幾次的計算。像 \(2^{3} = 2 \times 2 \times 2\) 這樣,右上方的小指數表示乘的次數。 |
| 指數 | 寫在乘方右上方、表示「幾次方」的小數字。\(2^{100}\) 的 100 就是指數。 |
| 首數 (整數部分) |
把數分成「不超過它的最大整數」和「剩下的部分」時的整數部分;常用對數的整數部分叫做首數。30.10 的首數是 30。要注意負數 \(-30.10\) 的首數是 \(-31\)(因為尾數一定取 0 以上、小於 1)。 |
| 尾數 (小數部分) |
把數分成「不超過它的最大整數」和「剩下的部分」時剩下的部分;常用對數的小數部分叫做尾數。30.10 的尾數是 0.10。尾數一定取 0 以上、小於 1,所以要注意負數 \(-30.10\) 的尾數是 \(0.90\)。 |
| 近似值 | 接近真正的值、捨入成方便處理的值。用 0.3010 代替 \(\log_{10} 2 = 0.30102\cdots\) 就是一個例子。捨入的部分會有誤差,誤差經過乘法會被放大。 |
| 有效數字 | 測量值或近似值中「可信的位數」。0.3010 是到小數第 4 位的近似值,所以把它乘上 10000 倍後的細節就不可信。這個頁面「手算和精確計算不同」的情況,就能用這個想法說明。 |
| 高斯符號 | 表示「不超過 \(x\) 的最大整數」的符號 \([x]\)。\([30.10] = 30\),\([-30.10] = -31\)。 |
建議先了解的基礎知識
為了能「理解意思」地使用這個頁面的計算,這裡整理了建議先了解的基礎知識。
遇到卡關時,回頭複習這些內容就是捷徑。
| 次方與指數(國中七年級,12~13 歲) |
|
| 指數的推廣(高一,15~16 歲) |
|
| 對數的定義(高一,15~16 歲) |
|
| 對數律(高一~高二,15~17 歲) |
|
| 不等式的讀寫(國中七年級~高一,12~16 歲) |
|
| 位值與位數(國小二~四年級,7~10 歲) |
|
用 Excel 計算的方法
| 底數 a | 2 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 位數(首數+1) | =INT(B3)+1 |
| 底數 a | 2 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 常用對數的尾數 | =B3-INT(B3) |
| 最高位數字 | =INT(10^B4) |
| 底數 a(小於 1 的小數) | 0.5 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 開始出現不為 0 的數字的位置(小數點後第幾位) | =-INT(B3) |
LOG10 是常用對數,INT 是「不超過那個數的最大整數」(首數、高斯符號)。INT 在負數時也會往小的方向捨去(INT(-30.1) 是 -31),所以第 3 個表的「=-INT(B3)」直接就是小數點後第幾位的答案。
直接用例子的數值計算,第 1 個表是 31(位數),第 2 個表是 1(最高位數字),第 3 個表是 31(小數點後第 31 位)。
Excel 的數值大約以 15 位的精度計算,所以指數非常大時,在 10 的次方的邊界附近答案可能會差 1。
用 Google 試算表計算的方法
| 底數 a | 2 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 位數(首數+1) | =INT(B3)+1 |
| 底數 a | 2 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 常用對數的尾數 | =B3-INT(B3) |
| 最高位數字 | =INT(10^B4) |
| 底數 a(小於 1 的小數) | 0.5 |
| 指數 k | 100 |
| 常用對數的值 k×log10(a) | =B2*LOG10(B1) |
| 開始出現不為 0 的數字的位置(小數點後第幾位) | =-INT(B3) |
把表格整個複製貼到 A1 儲存格,再把底數和指數改成您自己的數值。
用 Python 計算的方法
import math
a = 2 # 底數(2 以上的整數)
k = 100 # 指數(幾次方)
# 用常用對數計算(和手算相同的想法)
log_value = k * math.log10(a)
digit_count = math.floor(log_value) + 1 # 首數 + 1 = 位數
fractional = log_value - math.floor(log_value)
leading_digit = math.floor(10 ** fractional) # 由尾數求最高位數字
print(f"常用對數:{log_value}")
print(f"位數:{digit_count},最高位數字:{leading_digit}")
# 精確計算(Python 的整數沒有位數限制,所以能實際算到最後來確認)
actual = a ** k
print(f"實際的位數:{len(str(actual))},實際的最高位數字:{str(actual)[0]}")
# 小於 1 的小數(0.5 的 100 次方在小數點後第幾位)時,常用對數是負的
position = -math.floor(100 * math.log10(0.5))
print(f"0.5 的 100 次方在小數點後第 {position} 位開始出現不為 0 的數字")
用 LaTeX 等數學式語言的寫法(可直接複製)
log₁₀(aᵏ) = k log₁₀ a
\log_{10} a^{k} = k \log_{10} a
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>log</mi><mn>10</mn></msub>
<msup><mi>a</mi><mi>k</mi></msup>
<mo>=</mo>
<mi>k</mi>
<msub><mi>log</mi><mn>10</mn></msub>
<mi>a</mi>
</mrow>
</math>
log_10 (a^k) = k log_10 a
Log10[a^k] == k*Log10[a]
log10(a^k) = k*log10(a);
log10(a^k) == k*log10(a)
log_10(a^k) = k log_10(a)
10ⁿ⁻¹ ≤ N < 10ⁿ
10^{n-1} \le N < 10^{n}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mn>10</mn><mrow><mi>n</mi><mo>−</mo><mn>1</mn></mrow></msup>
<mo>≤</mo>
<mi>N</mi>
<mo><</mo>
<msup><mn>10</mn><mi>n</mi></msup>
</mrow>
</math>
10^(n-1) <= N < 10^n
IntegerLength[a^k]
length(a^k);
floor(log10(a^k)) + 1
10^(n-1) ≤ N < 10^n
log₁₀ d ≤ f < log₁₀(d+1)
\log_{10} d \le f < \log_{10} (d+1)
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>log</mi><mn>10</mn></msub>
<mi>d</mi>
<mo>≤</mo>
<mi>f</mi>
<mo><</mo>
<msub><mi>log</mi><mn>10</mn></msub>
<mo>(</mo><mi>d</mi><mo>+</mo><mn>1</mn><mo>)</mo>
</mrow>
</math>
log_10 d <= f < log_10 (d+1)
First[IntegerDigits[a^k]]
trunc(10^frac(k*log10(a)));
floor(10^(mod(k*log10(a), 1)))
log_10(d) ≤ f < log_10(d+1)
10⁻ᵐ ≤ N < 10⁻ᵐ⁺¹
10^{-m} \le N < 10^{-m+1}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mn>10</mn><mrow><mo>−</mo><mi>m</mi></mrow></msup>
<mo>≤</mo>
<mi>N</mi>
<mo><</mo>
<msup><mn>10</mn><mrow><mo>−</mo><mi>m</mi><mo>+</mo><mn>1</mn></mrow></msup>
</mrow>
</math>
10^(-m) <= N < 10^(-m+1)
-Floor[Log10[a^k]]
-floor(log10(a^k));
-floor(log10(a^k))
10^(-m) ≤ N < 10^(-m+1)
請 ChatGPT 幫忙計算的方法
你是數學(常用對數與位數)的計算助理。請務必實際執行 Python 程式碼來進行下面的計算,並只以執行結果的數值作為回答的根據(不要用心算或推測回答)。 1. 2 的 100 次方是幾位數?請用「k × log10(a) 的整數部分加 1」和「用 len(str(2**100)) 實際計算」兩種方法求出,並確認是否一致。 2. 請由常用對數的小數部分(尾數)求出 2 的 100 次方的最高位數字(最左邊的數字),並和實際的值核對。 3. 0.5 的 100 次方在小數點後第幾位開始出現不為 0 的數字?請用 -floor(100 × log10(0.5)) 求出。 請列出計算用的公式,以及執行結果的數值。
使用方法
-
1輸入數值在輸入欄中輸入要計算的數值
-
2計算按下「計算」按鈕
-
3查看結果計算結果會立即顯示。計算的思路和公式的解說,也都能在同一個頁面查看
DataChef 的特色
不需專業知識,操作直覺又簡單
無須登錄任何個人資料
按下「下載」後自動刪除檔案
無須標註來源出處
亦無須事先取得商用授權