「FACTDOUBLEって、FACTと何が違うの?」
スプレッドシートの関数一覧でこの名前を見かけて、首をかしげた人もいるのではないでしょうか。名前は似ていても、計算の中身ははっきり違います。
二重階乗は、普通の階乗と違って「1つおき」に掛ける計算です。偶数と奇数で終わり方が変わるうえ、数字もすぐ大きくなるので、手計算だと意外と間違えがち。
FACTDOUBLE関数なら、数値を1つ入れるだけで二重階乗が求められます。この記事では、書き方と結果の早見表、FACT関数との違いを順に紹介。負数や小数を入れたときの挙動も、Googleスプレッドシートでの結果をもとにまとめました。
スプレッドシートのFACTDOUBLE関数とは?構文と引数
FACTDOUBLE関数(読み方: ファクトダブル)は、指定した数値の二重階乗(n!!)を返す関数です。名前は「factorial(階乗)」と「double(二重)」を組み合わせたものです。
二重階乗は、nから2ずつ減らしながら掛けていく計算のこと。7なら「7×5×3×1=105」、8なら「8×6×4×2=384」になります。
基本構文
=FACTDOUBLE(値)
カッコの中に、数値かセル参照を1つ入れるだけ。引数を省略して =FACTDOUBLE() と書くと、引数の個数エラーとして #N/A が返ります。
引数の説明(小数は切り捨て)
| 引数 | 必須/任意 | 説明 |
|---|---|---|
| 値 | 必須 | 二重階乗を求める数値、またはそのセル参照。0以上の数で使う |
小数を指定すると、小数点以下は計算前に切り捨てられます。たとえば7.9は7として扱われ、結果は105です。
Excelにも同じ名前の関数があり、書き方は共通です。Excelで使いたい場合は、ExcelのFACTDOUBLE関数の使い方を参考にしてください。
奇数・偶数での計算例と結果早見表
奇数の二重階乗(7→105)
奇数を入れると、その数から1まで、奇数だけを掛けた値が返ります。
=FACTDOUBLE(7)
結果は105(7×5×3×1)です。セルA2に7が入っているなら、=FACTDOUBLE(A2) でも同じ結果になります。
偶数の二重階乗(6→48)
偶数の場合は、その数から2まで偶数だけを掛けます。
=FACTDOUBLE(6)
結果は48(6×4×2)。奇数は1で、偶数は2で掛け算が止まると覚えておけば迷いません。
n=0〜10 の早見表と0・1の特例
0〜10を入れたときの結果を一覧にしました。
| n | 偶奇 | 展開 | FACTDOUBLE(n) |
|---|---|---|---|
| 0 | 偶数 | (掛けるものなし) | 1 |
| 1 | 奇数 | 1 | 1 |
| 2 | 偶数 | 2 | 2 |
| 3 | 奇数 | 3×1 | 3 |
| 4 | 偶数 | 4×2 | 8 |
| 5 | 奇数 | 5×3×1 | 15 |
| 6 | 偶数 | 6×4×2 | 48 |
| 7 | 奇数 | 7×5×3×1 | 105 |
| 8 | 偶数 | 8×6×4×2 | 384 |
| 9 | 奇数 | 9×7×5×3×1 | 945 |
| 10 | 偶数 | 10×8×6×4×2 | 3,840 |
0と1は、どちらも1を返します。0!!=1は「掛けるものが何もない積は1とする」という数学の約束ごとによるものです。
nが大きくなると、結果は一気に膨らみます。n=100では、約3.42×10^79という桁違いの値に。
FACT関数との違い
比較表
| 項目 | FACT | FACTDOUBLE |
|---|---|---|
| 計算のしかた | 1ずつ減らして掛ける | 2ずつ減らして掛ける |
| 数学の記号 | n! | n!! |
| 7を入れた結果 | 5,040 | 105 |
| 6を入れた結果 | 720 | 48 |
| 計算できる最大のn | 170 | 288 |
FACTは1からnまでの整数をすべて掛けます。一方のFACTDOUBLEは1つおきに掛けるので、同じnでも結果はぐっと小さくなります。
そのぶん、計算できる範囲も広がります。FACTは171で#NUM!になりますが、FACTDOUBLEは288まで計算できます(Googleスプレッドシートでの実測値)。
FACT関数の詳しい使い方は、スプレッドシートのFACT関数の使い方をご覧ください。
FACT(n)=FACTDOUBLE(n)*FACTDOUBLE(n-1) の検算
nの階乗は、nの二重階乗と(n-1)の二重階乗の積に等しくなります。7!なら「7×5×3×1」と「6×4×2」に分けて掛け合わせるイメージです。
=FACT(7)
=FACTDOUBLE(7)*FACTDOUBLE(6)
どちらのセルも5040を返します。2つの関数の関係をつかみたいときや、結果が正しいか不安なときの検算に便利です。
二重階乗が使われる場面
二重階乗は、日々の事務作業で頻繁に使う計算ではありません。おもに数学の公式や、組合せの計算の途中で顔を出す程度です。ここでは、関数の動きを理解するのに役立つ例を紹介します。
偶数の公式 2^(n/2)*(n/2)! で検算
偶数nの二重階乗は「2の(n/2)乗 ×(n/2)の階乗」で表せます。10!!なら、2^5×5!=32×120=3,840。
=2^5*FACT(5)
結果は3840で、=FACTDOUBLE(10) と一致します。10×8×6×4×2の各項から2をくくり出すと、残りが5×4×3×2×1になる仕組みです。
ウォリスの公式でπを近似する
円周率πを近似するウォリスの公式も、二重階乗を使って書けます。
=2*FACTDOUBLE(10)^2/(FACTDOUBLE(9)*FACTDOUBLE(11))
結果は約3.0022。πは約3.1416なので、近づき方はかなりゆっくりだとわかります。実用の計算というより、数式の中で二重階乗がどう使われるかを見る例と考えてください。
関連する階乗系関数(COMBIN・PERMUT・MULTINOMIAL・GAMMA)
階乗に関係する関数は、ほかにもいくつかあります。
| 関数 | できること |
|---|---|
| COMBIN関数 | n個からk個を選ぶ組合せの数 |
| COMBINA関数 | 重複を許した組合せの数 |
| PERMUT関数 | n個からk個を選んで並べる順列の数 |
| MULTINOMIAL関数 | 多項係数 |
| GAMMA関数 | 階乗を整数以外にも広げたガンマ関数の値 |
入力値が奇数か偶数かを判定したいときは、ISODD関数やISEVEN関数が使えます。
負数・小数・文字列を入れたときの挙動とエラー
引数別の結果表(Googleスプレッドシート)
FACTDOUBLE関数に、整数以外の値を入れたときの結果をまとめました。
| 入力 | 結果 | 補足 |
|---|---|---|
=FACTDOUBLE(0) | 1 | 0の二重階乗は1 |
=FACTDOUBLE(-1) | #NUM! | -1もエラーになる |
=FACTDOUBLE(-2) | #NUM! | 負の整数はエラー |
=FACTDOUBLE(-1.5) | #NUM! | 負の小数もエラー |
=FACTDOUBLE(7.9) | 105 | 小数点以下を切り捨てて7で計算 |
=FACTDOUBLE("7") | 105 | 数字の文字列は数値として扱われる |
=FACTDOUBLE("a") | #VALUE! | 数値にできない文字列 |
=FACTDOUBLE(TRUE) | 1 | TRUEは1として扱われる |
| 空のセルを参照 | 1 | 空セルは0として扱われる |
=FACTDOUBLE(288) | 約1.24×10^293 | 計算できる最大のn |
=FACTDOUBLE(289) | #NUM! | 289以上はエラー |
数学では(-1)!!=1とする約束もありますが、スプレッドシートのFACTDOUBLEでは-1も#NUM!です。負の数は、整数か小数かを問わずエラーになると考えておきましょう。
見落としやすいのが空セルの扱いです。入力漏れがあっても1が表示されるため、エラーに気づかないまま集計が進むおそれがあります。
#NUM!・#VALUE! の対処
#NUM!が出たら、まずは参照先にマイナスの値が混じっていないかを見てください。289以上の数を指定した場合も同じエラーになります。
#VALUE!は、「a」や「-」のように数値に変換できない文字列が原因です。全角数字や記号が紛れ込んでいないか、参照先のセルを確認しましょう。
空セルで1が出るのを防ぐなら、IF関数で空欄のときだけ計算を飛ばします。
=IF(A2="","",FACTDOUBLE(A2))
エラーをまとめて空欄にしたいなら、IFERROR関数で包む方法も。
=IFERROR(FACTDOUBLE(A2),"")
ただしIFERRORは原因を問わずエラーを隠します。入力ミスを見逃さないよう、原因を確かめてから使うのがおすすめです。
まとめ|FACTDOUBLE関数のポイント
スプレッドシートのFACTDOUBLE関数のポイントを振り返ります。
=FACTDOUBLE(値)で二重階乗(n!!)を返す- 奇数は1まで、偶数は2まで掛ける(7→105、6→48)
- 0と1は、どちらも1を返す
- FACT(n)=FACTDOUBLE(n)×FACTDOUBLE(n-1) で検算できる
- 負の数は-1も含めて#NUM!、小数は切り捨て
- 計算できるのはn=288まで。空セルは0扱いで1になる
二重階乗は出番の少ない計算ですが、関数を使えば1セルで正確に求められます。通常の階乗も扱うなら、FACT関数の記事もチェックしてみてください。
