スプレッドシートのFACTDOUBLE関数の使い方|二重階乗

スポンサーリンク

「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奇数11
2偶数22
3奇数3×13
4偶数4×28
5奇数5×3×115
6偶数6×4×248
7奇数7×5×3×1105
8偶数8×6×4×2384
9奇数9×7×5×3×1945
10偶数10×8×6×4×23,840

0と1は、どちらも1を返します。0!!=1は「掛けるものが何もない積は1とする」という数学の約束ごとによるものです。

nが大きくなると、結果は一気に膨らみます。n=100では、約3.42×10^79という桁違いの値に。

FACT関数との違い

比較表

項目FACTFACTDOUBLE
計算のしかた1ずつ減らして掛ける2ずつ減らして掛ける
数学の記号n!n!!
7を入れた結果5,040105
6を入れた結果72048
計算できる最大のn170288

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)10の二重階乗は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)1TRUEは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関数の記事もチェックしてみてください。

タイトルとURLをコピーしました