「スプレッドシートで複素数のlog2を出したいけど、毎回IMLNをln(2)で割る式を書くのが面倒…」
スプレッドシートで複素数を扱う場面では、log₂(a+bi) の値が必要になることがありますよね。情報理論やオクターブ計算では、自然対数より2を底とする対数のほうが直感的です。でも、毎回 IMLN とLNを組み合わせて分母にln(2)を入れるのは、数式が読みづらくなりがちです。
そんなときに頼りになるのがGoogleスプレッドシートのIMLOG2関数です。複素数を1つ渡すだけで「その複素数の2を底とする対数」を一発で返してくれますよ。情報量計算やオクターブ分解の数式が、ぐっとすっきりしますね。
ExcelのIMLOG2関数と完全互換なので、Excelファイルとやり取りする現場でも安心です。COMPLEX関数で作った複素数や、IMLN関数と組み合わせた式からも、そのまま渡せますよ。
この記事では、スプレッドシートのIMLOG2関数の基本構文と実務での活用例を解説します。IMLNとの関係や、主値の範囲、よくあるエラーと対処法もしっかり紹介していきますね。
スプレッドシートのIMLOG2関数とは?
GoogleスプレッドシートのIMLOG2関数は、複素数の2を底とする対数(log₂(z))を返す関数です。エンジニアリング関数(電気・物理・工学系の計算で使う関数群)のひとつに分類されますよ。
読み方は「イマジナリー・ログ・ツー」または「アイエム・ログ・ツー」です。英語の「imaginary(虚数の)」と「logarithm base 2(2を底とする対数)」を組み合わせた名前ですね。複素数「a+bi」の2底対数を、複素数として返してくれるのが役割です。
複素数の2底対数は、自然対数を ln(2) で割り算した形で定義できます。具体的な式は次のとおりですよ。
log2(a+bi) = ln(a+bi) / ln(2)
= log2(|a+bi|) + i × arg(a+bi) / ln(2)
= log2(√(a²+b²)) + i × atan2(b, a) / ln(2)
実部は「絶対値の2底対数」、虚部は「偏角を ln(2) で割った値」となり、結果も複素数で返るのが特徴ですね。ln(2) は約0.6931なので、IMLN の結果に対しておよそ1.4427倍したものに相当します。
| 複素数(z) | IMLOG2(z)の結果 | 内部計算 |
|---|---|---|
| 1+0i | 0 | log2(1) = 0 |
| 2+0i | 1+0i | log2(2) = 1 |
| 4+0i | 2+0i | log2(4) = 2 |
| 8+0i | 3+0i | log2(8) = 3 |
| -1+0i | 0+4.5324i | log2(1) + i×π/ln(2) |
| 0+1i | 0+2.2662i | log2(1) + i×π/(2ln(2)) |
| 1+1i | 0.5+1.1331i | log2(√2) + i×(π/4)/ln(2) |
IMLOG2関数を使えば、この表の右側にある「複素数の2底対数」をサクッと取り出せます。Excelとの互換性も完璧で、Excel 2007以降のすべてのバージョンに対応していますよ。
複素数の2底対数は、情報理論のエントロピー計算・オクターブ周波数比の解析・アルゴリズムの計算量解析・画像処理のビット深度計算などで活躍します。「2倍するごとに1ずつ増える」という直感的なスケールが欲しい場面で、欠かせない基礎パーツですね。
IMLOG2関数の書き方(構文と引数)
基本構文
=IMLOG2(複素数)
引数は1つで、2底対数を取りたい複素数を渡す形ですよ。
引数の詳細
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 複素数(inumber) | 必須 | 2底対数を計算する複素数。文字列またはセル参照で指定する |
引数には「”1+2i”」や「”1+2j”」のような複素数文字列を直接渡せます。COMPLEX関数(実数と虚数から複素数を作成する関数)の結果や、複素数が入ったセルの参照も指定できますよ。
虚数単位は小文字の「i」または「j」のどちらでも受け付けます。数学では「i」、電気工学では「j」が使われる慣習ですね。IMLOG2関数はどちらでも同じように動作してくれます。
TIP
IMLOG2が返す虚部の範囲は -π/ln(2) < θ ≤ π/ln(2)、おおよそ -4.5324 < θ ≤ 4.5324 です。これは IMLN関数 の主値(-π〜π)を ln(2) で割った値に相当しますよ。覚えておきましょう。
引数に正の実数だけを渡せば、通常のLOG関数(底2指定)と同じ結果になります。「IMLOG2(“8”)」も「LOG(8, 2)」もどちらも3ですね。違いは戻り値が複素数文字列になるか実数になるかだけですよ。
IMLOG2関数の基本的な使い方
文字列で複素数を直接指定する
複素数文字列をそのまま引数に渡してみましょう。
=IMLOG2("1+1i")
結果は「0.5+1.13309778050294i」になります。実部はlog₂(√2)=0.5、虚部は(π/4)/ln(2)≈1.1331ですね。
正の実部だけの複素数を渡すと、通常のLOG関数と同じ結果になります。
=IMLOG2("8")
=IMLOG2("8+0i")
どちらも結果は約「3+0i」、つまり log₂(8) = 3 ですよ。実数の世界の2底対数と一致しますね。
純虚数を渡すと、結果は実部0で虚部が±π/(2ln(2))になります。
=IMLOG2("0+1i")
=IMLOG2("0-1i")
前者は「0+2.2662…i」、後者は「0-2.2662…i」になりますよ。複素平面の縦軸に乗っている純虚数の偏角が、±π/(2ln(2))として返ってきますね。
負の実数の対数を計算する
実数の世界では「負の数の対数は計算できない」とされますよね。複素数まで広げると、IMLOG2はちゃんと値を返してくれます。
=IMLOG2("-1")
結果は「0+4.5323601418…i」になりますよ。実部は0、虚部はπ/ln(2)となります。これは「-1 = 1 × e^(iπ)」を2底に直したものですね。LOG(-1, 2) はエラーになりますが、IMLOG2 なら計算できる点が便利なところです。
セル参照で複素数を指定する
実務ではセルに入った複素数を扱う場面が多いですよね。A2に「1+1i」が入っている場合は次のように書きます。
=IMLOG2(A2)
結果は「0.5+1.1331…i」になります。セル参照を渡すだけで、入っている複素数の2底対数を取り出せますよ。
COMPLEX関数と組み合わせる
COMPLEX関数で作った複素数を、その場でIMLOG2に渡すこともできます。
=IMLOG2(COMPLEX(1, 1))
結果は「0.5+1.1331…i」、つまり「IMLOG2(“1+1i”)」と同じですね。COMPLEX(1, 1)が内部で「1+1i」を作り、IMLOG2関数がその2底対数を返してくれます。
数値で実部と虚部を渡したいときに便利な書き方ですよ。
ARRAYFORMULAで複数行を一括処理する
複素数のリストに対して一気に2底対数の列を作りたい場面もありますよね。そんなときはARRAYFORMULA関数(数式を範囲全体に展開する関数)と組み合わせます。
=ARRAYFORMULA(IMLOG2(A2:A10))
A列の複素数を順番に2底対数に変換して、対応する結果をB列に一発で展開できますよ。情報理論のビット表現やオクターブ計算を一括処理するときに重宝しますね。
IMLOG2関数の実務活用例
活用例1: 情報量(ビット数)を求める
情報理論では「ある事象の情報量」を log₂(1/p) で表しますよね。確率pが複素数振幅の2乗で表される量子情報の文脈では、複素数のままlog₂を取れると便利です。
A列に複素数振幅が並んでいるとしましょう。
B2: =IMABS(A2) ← 振幅 |z|
C2: =B2^2 ← 確率 |z|^2
D2: =-LOG(C2, 2) ← 情報量(ビット)
複素数の振幅と位相を一緒に解析したい場合は、IMLOG2を直接使う方法もありますよ。
E2: =IMLOG2(A2) ← 複素2底対数
F2: =IMREAL(E2) ← log2(|z|)
F列が log₂(|z|) です。情報量の符号反転を入れれば「-2×F2」で2乗の情報量が得られますね。エントロピー計算やシャノン情報量の解析シートで使えるパターンですよ。
活用例2: オクターブ数を計算する
音響や周波数解析では、2倍ごとに「1オクターブ」と数えますよね。複素フェーザの周波数比を一発でオクターブ数に変換できますよ。
基準周波数 f₀ と任意周波数 f の比 f/f₀ を複素数で扱う場合を考えてみましょう。
A2: =COMPLEX(8, 0) ← 周波数比 8(実数)
B2: =IMLOG2(A2) ← オクターブ数
C2: =IMREAL(B2) ← 実数のオクターブ
C2の値は3になります。「8倍は3オクターブ上」という直感どおりの結果ですね。複素数を渡せば、位相情報も同時に扱える点が IMLOG2 の強みですよ。
TIP
オクターブ数だけが必要なら
=LOG(IMABS(A2), 2)でも代用できます。位相情報も保ちたいときに IMLOG2 の出番ですね。
活用例3: IMLN関数との関係を確認する
IMLOG2関数は、内部的に「IMLN(z) ÷ ln(2)」と等価です。実際にスプレッドシートで確認してみましょう。
A2: =COMPLEX(1, 1) ← z = 1+i
B2: =IMLOG2(A2) ← 直接計算
C2: =IMDIV(IMLN(A2), COMPLEX(LN(2), 0)) ← IMLNから計算
B2とC2の値は一致して「0.5+1.1331…i」になりますよ。IMLOG2は IMLN の結果を ln(2) で割った形と同じだと、数式レベルで確認できますね。底の変換公式を理解する勉強用にも使える書き方です。
活用例4: ビット深度の計算(量子化レベル)
画像や音声のデジタル化では、量子化レベル数 N からビット深度 log₂(N) を求めます。複素数で表される量子化フェーザを扱う場合に便利ですよ。
A2: 256 ← 量子化レベル数
B2: =COMPLEX(A2, 0) ← 複素数化
C2: =IMLOG2(B2) ← ビット深度
D2: =IMREAL(C2) ← 実数ビット数
D2は8になります。256階調なら8ビットですね。複素数のまま処理を続けたい場合に IMLOG2 を挟んでおくと、後段の数式と型が揃って扱いやすくなりますよ。
活用例5: 計算量オーダーの可視化
アルゴリズムの計算量解析では「O(log₂ N)」のような表記が出てきますよね。データサイズ N の対数を素早く可視化するときに IMLOG2 が使えますよ。
A列にデータサイズが並んでいる場面を考えてみましょう。
B2: =IMLOG2(COMPLEX(A2, 0)) ← log2(N)
C2: =IMREAL(B2) ← 実数値
A2が1024なら C2 は10、A2が1,048,576なら C2 は20になります。データ量が2倍になるごとに1ずつ増えるスケールが、シート上で直感的に確認できますね。複素数を扱わない単純なケースなら =LOG(A2, 2) でも構いません。複素数を含む解析パイプラインの中では、IMLOG2 で型を揃えるとシートが整いますよ。
IMLOG2関数とCOMPLEX関数群の関係
複素数を扱う関数群の中で、IMLOG2関数の位置づけを整理しておきましょう。
| 関数 | 入力 | 出力 | 役割 |
|---|---|---|---|
| COMPLEX | 実数 a, b | 複素数 a+bi | 複素数を作る |
| IMREAL | 複素数 a+bi | 実数 a | 実部を取り出す |
| IMAGINARY | 複素数 a+bi | 実数 b | 虚部を取り出す |
| IMABS | 複素数 a+bi | 実数 √(a²+b²) | 大きさを取り出す |
| IMARGUMENT | 複素数 a+bi | 実数(ラジアン) | 偏角を取り出す |
| IMEXP | 複素数 z | 複素数 e^z | 指数関数 |
| IMLN | 複素数 z | 複素数 ln(z) | 自然対数 |
| IMLOG2 | 複素数 z | 複素数 log₂(z) | 2を底とする対数 |
| IMLOG10 | 複素数 z | 複素数 log₁₀(z) | 10を底とする対数 |
| IMPOWER | 複素数 z, 実数 n | 複素数 z^n | べき乗 |
IMLOG2関数とIMLN関数は「底の変換公式」でつながっています。「IMLOG2(z) = IMLN(z) / ln(2)」が数学的な関係ですよ。同様にIMLOG10は IMLN(z) / ln(10) と等価ですね。
たとえば定義式どおりに log₂(a+bi) を手動で組み立てると次のようになります。
=COMPLEX(LOG(SQRT(IMREAL(A2)^2+IMAGINARY(A2)^2), 2), ATAN2(IMREAL(A2), IMAGINARY(A2))/LN(2))
これはIMLOG2と同じ結果になりますが、絶対値と偏角を毎回手書きする必要がありますよね。IMLOG2を使えば1関数で済むので、数式が読みやすくなります。
IMLOG2関数のよくあるエラーと対処法
#NUM! エラー(複素数の形式エラー、または z=0)
複素数として認識できない文字列を渡したときや、ゼロを渡したときに発生します。
=IMLOG2("1+1I") → #NUM!(大文字のIは不可)
=IMLOG2("1+1k") → #NUM!(i・j以外は不可)
=IMLOG2("1 + 1i") → #NUM!(途中の空白は不可)
=IMLOG2("0") → #NUM!(log2(0)は定義されない)
=IMLOG2("0+0i") → #NUM!(同上)
対処法は2つあります。1つ目は、複素数文字列を必ず半角の「a+bi」または「a+bj」の形式にすることです。虚数単位は小文字限定なので、CapsLockがオンになっていないか確認してくださいね。
2つ目は、ゼロを渡さないことです。実数の世界でlog₂(0)が定義されないのと同じく、複素数の世界でも0の対数は計算できません。入力データに0が混じる可能性がある場合は、後述のIFERROR対策を入れておきましょう。
#VALUE! エラー(引数の型エラー)
引数に論理値やエラー値を渡したときに発生します。
=IMLOG2(TRUE) → #VALUE!(論理値は不可)
=IMLOG2(#N/A) → #VALUE!(エラー値は不可)
対処法は、正しい複素数文字列または数値・セル参照を渡すことです。入力元のセルがエラーになっている場合は、そのエラーを先に解消する必要がありますよ。
主値の範囲を超えた角度を期待してしまう問題
IMLOG2が返す虚部は -π/ln(2) < θ ≤ π/ln(2)、つまり約 -4.5324 < θ ≤ 4.5324 の主値だけです。これは IMLN関数 の主値 (-π, π] を ln(2) で割った値ですね。
=IMLOG2("0-1i") → 0-2.2662i(-π/(2ln2))
この複素数 -i は「3π/2 ラジアン回転した点」とも見なせますが、IMLOG2 はそのうち主値(-π/2 を ln(2) で割った値)を返します。連続的に偏角を追跡したい場面では、後段で「アンラップ処理」を実装する必要がある点に注意してくださいね。
IFERRORでまとめてエラーを吸収する
入力データの信頼性が低い場合や、ゼロが混じる可能性がある場合に備えておきたいですよね。そんなときはIFERROR関数(エラー時に代替値を返す関数)で包んでおきましょう。シート全体の集計が止まらず安心です。
=IFERROR(IMLOG2(A2), "計算不可")
エラー時にメッセージを返すようにしておけば、安心して大量データに適用できますよ。
IMLOG2関数とExcelの互換性
GoogleスプレッドシートのIMLOG2関数は、ExcelのIMLOG2関数と仕様が完全に一致しています。構文・引数・戻り値の形式・主値の範囲・エラー条件まで同じですよ。
ExcelファイルをGoogleスプレッドシートで開いてもIMLOG2関数はそのまま動作します。逆にスプレッドシートで作った数式をExcelで開いても問題ありませんね。
ExcelのIMLOG2関数は、Excel 2007以降のすべてのバージョンで利用できます。Microsoft 365、Excel for Mac、Excel Online でも同じように使えますよ。古いExcelファイルとの互換性も心配いりません。
複素数関連の関数一覧
IMLOG2関数と一緒に使うことが多い、複素数関連の関数をまとめました。
| 関数名 | 機能 |
|---|---|
| COMPLEX | 実数と虚数から複素数を作成する |
| IMREAL | 複素数の実数係数を返す |
| IMAGINARY | 複素数の虚数係数を返す |
| IMABS | 複素数の絶対値(大きさ)を返す |
| IMARGUMENT | 複素数の偏角(角度)をラジアンで返す |
| IMCONJUGATE | 共役複素数を返す |
| IMSUM | 複素数の合計(足し算)を返す |
| IMSUB | 複素数の差(引き算)を返す |
| IMPRODUCT | 複素数の積(掛け算)を返す |
| IMDIV | 複素数の商(割り算)を返す |
| IMEXP | 複素数の指数関数(eべき乗)を返す |
| IMLN | 複素数の自然対数を返す |
| IMLOG2 | 複素数の2を底とする対数を返す |
| IMLOG10 | 複素数の10を底とする対数を返す |
| IMPOWER | 複素数のべき乗を返す |
| IMSQRT | 複素数の平方根を返す |
IMLOG2関数は、これら複素数関数群の中で「2底対数」を担う基本関数ですね。COMPLEXで複素数を作り、IMLOG2で2底対数値を求めるのが基本の流れです。最後はIMREAL・IMAGINARYで実部と虚部に分けて可視化しましょう。情報理論やオクターブ解析のシートを軽快に組み立てられますよ。
まとめ
GoogleスプレッドシートのIMLOG2関数は、複素数の2を底とする対数(log₂(z))を返す関数です。情報理論・オクターブ計算・ビット深度解析・アルゴリズム計算量の可視化など、「2倍ごとに1増える」直感的なスケールが欲しい場面で欠かせない関数ですよ。
- 構文は
=IMLOG2(複素数)で複素数を1つ渡すだけ - 「log2(a+bi) = ln(a+bi) / ln(2)」が内部計算式
- 実部は絶対値の2底対数、虚部は偏角を ln(2) で割った値になる
- 「a+bi」と「a+bj」のどちらの表記もそのまま受け付ける
- 虚部の主値は -π/ln(2) < θ ≤ π/ln(2)(約 -4.5324 〜 4.5324)
- 正の実部だけの複素数を渡すと通常のLOG(値, 2)と同じ結果になる
- 「log2(-1)」も計算でき、結果は 0+(π/ln(2))i になる
- COMPLEX関数の結果やセル参照、複素数演算の結果も渡せる
- ARRAYFORMULAで複数の複素数を一括処理できる
- IMLN関数とは「IMLOG2(z) = IMLN(z) / ln(2)」の関係
- z=0 を渡すと #NUM! エラー(log2(0)は定義されない)
- 大文字の「I」「J」やi・j以外の単位は #NUM! エラー
- 論理値やエラー値を渡すと #VALUE! エラー
- ExcelのIMLOG2関数と完全互換(Excel 2007以降)
複素数の2底対数が必要になったら、IMLOG2関数の出番ですよ。COMPLEX関数で複素数を作り、IMLOG2で対数を取りましょう。最後にIMREAL・IMAGINARYで実部と虚部に分解すれば、情報理論やオクターブ解析のシートを軽快に組み立てられますね。
