回 2-1 分野 2 関数と対数
対数 (log) は、
読み終えたらn 件を
この頁の流れ
累乗と
100 万件から 探すのに、 なぜ 20 回で 足りるのか
100 万を
名前の
逆から
この
累乗と 対数の関係
累乗
同じ数を
| k | 2^k | 出てくる場面 |
|---|---|---|
| 8 | 256 | 1 バイトで |
| 10 | 1,024 | およそ |
| 16 | 65,536 | 2 バイトで |
| 20 | 1,048,576 | およそ |
| 30 | 1,073,741,824 | およそ |
| 32 | 4,294,967,296 | 4 バイトで |
2^10 が
対数
2 を
- 底 (てい) は、
掛ける数。 log2 8 の 2 - 真数 (しんすう
) は、 作りたい数。 log2 8 の 8 - 対数は、
掛ける 回数。 log2 8 の 答えの 3
2^3 = 8 と
底は
基本の値と公式
どの
| 書き方 | 意味 | 2 を |
|---|---|---|
| log_a 1 = 0 | 0 回掛けると 1 | log2 1 = 0 |
| log_a a = 1 | 1 回掛けると a | log2 2 = 1 |
| log_a (x × y) = log_a x + log_a y | 掛け算は | log2 32 = 2 + 3 |
| log_a (x ÷ y) = log_a x − log_a y | 割り算は | log2 4 = 5 − 3 |
| log_a (x^k) = k × log_a x | 累乗は | log2 64 = 2 × 3 |
| log_a x = log_b x ÷ log_b a | 底の変換 | log2 1000 = log10 1000 ÷ log10 2 |
公式が
底の
自然対数と 常用対数と、 底を 書かない log
よく
- 常用対数 (底 10)。
log10 x。 10 進数の 桁数と結びつく - 二進対数 (底 2)。
log2 x。 半分に する 回数、 ビット数と結びつく - 自然対数 (底 e、
約 2.718)。 ln x とも 書く。 成長や 確率の式に出る
底をmath.log(x) では
対数の伸び方
真数を
| n | log2 n (約) | log10 n |
|---|---|---|
| 10 | 3.3 | 1 |
| 1,000 | 10.0 | 3 |
| 1,000,000 | 19.9 | 6 |
| 1,000,000,000 | 29.9 | 9 |
10 億件でも、
動かして確かめる
1 本目は、math.log2 と
動かす 半分にする回数と log2
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
8
半分 3
log2 3.0
1000
半分 9
log2 9.97
1000000
半分 19
log2 19.93
1000000000
半分 29
log2 29.9数えた
2 本目は、
動かす 桁数とビット数
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
9
桁 1 1
ビット 4 4
10
桁 2 2
ビット 4 4
255
桁 3 3
ビット 8 8
256
桁 3 3
ビット 9 9
65535
桁 5 5
ビット 16 16式でlen(str(n))) やbit_length()) で
3 本目は、
動かす 対数の公式を確かめる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
積 5.0
5.0
商 2.0
2.0
累乗 6.0
6.0
底の変換
9.9658
9.9658積は
対数の 計算は どこで外れるか
小数の 誤差で、 桁数が 1 つずれる
math.log(x, 10) で
動かす 小数の誤差で切り捨てがずれる
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
2.9999999999999996
3 桁?
3.0
4 桁math.log(1000, 10) はmath.log10 と math.log2 は math.log(x, 10) や math.log(x, 2) より
整数のlen(str(n)) と n.bit_length() で
小さな 確率を 掛け続けると 0 になる
機械学習では、
動かす 掛け算を対数の足し算にする
▶ 実行ボタンを押すと結果がここに表示されます
実行すると、次の通りに出ます
掛けた数 0.0
log10 の和 -400.00.01 を 200 回掛けた本当の
仕事と コンテストで どう使うか
対数で
- 二分探索の
回数。 n 件なら 約 log2 n 回。 並べてから 探す処理を 選ぶ根拠になる - 計算量。
O(log n) は 二分探索、 O(n log n) は 速い ソート。 データが 1000 倍で log2 は 約 10 増えるだけ - 木の高さ。1 つの節から 2 つに分かれる
釣り合った 木に n 個入れると、 高さは 約 log2 n - ビット数。
n 通りを 区別するには 約 log2 n ビット要る。 100 万通りなら 20 ビット - 桁数。
答えが 何桁に なるかを log10 で 先に 見積もり、 整数の 上限 (2^63 など ) を 超えないかを確かめる
競技プログラミングでは、
よくある問い
log とは 何の略ですか
英語の
対数と 指数は 何が 違いますか
同じ
Python で log を 計算するには
math.log2(x) が底 2、math.log10(x) がmath.log(x) がmath.log(x, 底) でlen(str(n)) と n.bit_length() で
自然対数の e とは何ですか
約 2.71828 のmath.log(x) が
確認クイズ
答えだと
1 問目
並んだ 1000 件のデータから、
2 問目
log2 32 の
3 問目
O(log n) の
説明課題
「100 万件の
自分の
この回の 先の一歩
データが
もっと深く
この
一次資料
どれも 2026年10月30日に開いて、
- math (Python 3.14 公式文書、英語)。
math.log(x, base)が底を 指定した 対数、引数 1 つなら底 e、 math.log2とmath.log10がlog(x, 2)とlog(x, 10)より正確な ことが多いこと - Floating-Point Arithmetic Issues and Limitations (Python 公式文書、英語)。10 進の
小数の 多くは 2 進の 小数で 正確に 表せず、 近い値で持つこと - Built-in Types の
int.bit_length (Python 公式文書、英語) 。整数を2 進で 表すのに 要る ビット数を、 符号と 先頭の 0 を 除いて返すこと
次へ
分野 2 関数と対数の回
- 2-1累乗と対数log は
何回掛けるか、 何回半分にできるかこの回 - 2-2関数の
形とオーダー一次、 二次、 指数、 対数の伸び方準備中