Skip to content

Commit 2496fa5

Browse files
author
cpprefjp-autoupdate
committed
update automatically
1 parent f8f9a29 commit 2496fa5

File tree

7 files changed

+553
-941
lines changed

7 files changed

+553
-941
lines changed

reference/cmath/assoc_legendre.html

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,12 @@
204204

205205
<p class="text-right"><small>
206206
最終更新日時(UTC):
207-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
208-
2024年06月11日 13時45分38秒
207+
<span itemprop="datePublished" content="2025-02-09T06:38:35">
208+
2025年02月09日 06時38分35秒
209209
</span>
210210
<br/>
211211
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
212-
<span itemprop="name">Akira Takahashi</span>
212+
<span itemprop="name">Koichi Murase</span>
213213
</span>
214214
が更新
215215
</small></p>
@@ -280,6 +280,26 @@ <h2>備考</h2>
280280
<li><code>l &gt;= 128</code> の場合、この関数の呼び出しの効果は<a class="cpprefjp-defined-word" data-desc="処理系定義の動作。処理系によって事前に定めた動作をする" href="../../implementation-compliance.html#dfn-implementation-defined-behavior">実装定義</a>である</li>
281281
<li>(1) : C++23では、<a class="cpprefjp-defined-word" data-desc="&lt;stdfloat&gt;で定義される内部表現の規定された浮動小数点数型" href="../stdfloat.html">拡張浮動小数点数型</a>を含む浮動小数点数型への<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>として定義された</li>
282282
</ul>
283+
<h3>負の m の対応</h3>
284+
<p>この標準関数は $m$ が正の場合にしか対応していない。
285+
一方でルジャンドル陪関数はロドリゲスの公式を用いて負の $m$ に対して自然に拡張され、
286+
このことは球面調和関数を定義する上でも使われる。
287+
負の $m$ に対してもルジャンドル陪関数を計算する必要がある場合は、関係式
288+
$$ P_l^{-m}(x) = (-1)^m \frac{(l-m)!}{(l+m)!} P_l^m(x) $$
289+
を用いる必要がある。</p>
290+
<p><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../cmath.html">&lt;cmath&gt;</a></span><span class="cp"></span>
291+
292+
<span class="c1">// 負の m にも対応した実装例</span>
293+
<span class="kt">double</span> <span class="nf">assoc_legendre</span><span class="p">(</span><span class="kt">unsigned</span> <span class="n">l</span><span class="p">,</span> <span class="kt">int</span> <span class="n">m</span><span class="p">,</span> <span class="kt">double</span> <span class="n">x</span><span class="p">)</span> <span class="p">{</span>
294+
<span class="k">if</span> <span class="p">(</span><span class="n">m</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">)</span>
295+
<span class="k">return</span> <span class="n"><span style="color:#ff0000">std::assoc_legendre</span></span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="p">(</span><span class="kt">unsigned</span><span class="p">)</span> <span class="n">m</span><span class="p">,</span> <span class="n">x</span><span class="p">);</span>
296+
<span class="k">else</span>
297+
<span class="k">return</span> <span class="n">std</span><span class="o">::</span><span class="n">pow</span><span class="p">(</span><span class="o">-</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">m</span><span class="p">)</span> <span class="o">*</span> <span class="p">(</span><span class="n"><a href="tgamma.html">std::tgamma</a></span><span class="p">(</span><span class="mf">1.0</span> <span class="o">+</span> <span class="n">l</span> <span class="o">+</span> <span class="n">m</span><span class="p">)</span> <span class="o">/</span> <span class="n"><a href="tgamma.html">std::tgamma</a></span><span class="p">(</span><span class="mf">1.0</span> <span class="o">+</span> <span class="n">l</span> <span class="o">-</span> <span class="n">m</span><span class="p">))</span> <span class="o">*</span> <span class="n"><span style="color:#ff0000">std::assoc_legendre</span></span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="p">(</span><span class="kt">unsigned</span><span class="p">)</span> <span class="o">-</span><span class="n">m</span><span class="p">,</span> <span class="n">x</span><span class="p">);</span>
298+
<span class="p">}</span>
299+
</code></pre></div>
300+
</p>
301+
<p>上記の例では簡単のために階乗をガンマ関数 $n! = \Gamma(n + 1)$ (<code><a href="tgamma.html">tgamma</a></code>) で計算しているが、
302+
計算効率やオーバーフローなどを考えると、直接 $(l + |m|)\cdots(l - |m| + 1)$ で割り算したり、係数を事前計算しておくなど工夫すると良い。</p>
283303
<h2></h2>
284304
<p><div class="yata" id="4bde9e4a053a47145ca32e2a37f10cc67fdbb210"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../cmath.html">&lt;cmath&gt;</a></span><span class="cp"></span>
285305
<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>

reference/cmath/legendre.html

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,12 +204,12 @@
204204

205205
<p class="text-right"><small>
206206
最終更新日時(UTC):
207-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
208-
2024年06月11日 13時45分38秒
207+
<span itemprop="datePublished" content="2025-02-09T06:51:08">
208+
2025年02月09日 06時51分08秒
209209
</span>
210210
<br/>
211211
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
212-
<span itemprop="name">Akira Takahashi</span>
212+
<span itemprop="name">Koichi Murase</span>
213213
</span>
214214
が更新
215215
</small></p>
@@ -320,6 +320,11 @@ <h3>処理系</h3>
320320
<li><a href="../../implementation.html#icc">ICC</a>: ??</li>
321321
<li><a href="../../implementation.html#visual_cpp">Visual C++</a>: ??</li>
322322
</ul>
323+
<h3>備考</h3>
324+
<ul>
325+
<li>GCC 7, 8 には $x$ として [-1.0, 1.0] の範囲外の値を渡した時に、<code><a href="../stdexcept.html">std::domain_error</a></code> を投げるバグがあった (GCC 7.5, 8.2, 8.4 <span aria-label="検証済" role="img" title="検証済"></span>)。
326+
GCC 9 以降では直っている (GCC 9.3, 10.5, 11.4, 12.3, 13.2, 15.0 <span aria-label="検証済" role="img" title="検証済"></span>)。</li>
327+
</ul>
323328
<h2>実装例</h2>
324329
<h3>閉形式</h3>
325330
<p>$$ P_l(x) = \frac{1}{2^l l!} \sum_{j=0}^{\lfloor l/2 \rfloor} (-1)^j \frac{l! (2l-2j)!}{j! (l-j)! (l-2j)!} x^{l-2j} $$</p>

reference/cmath/lgamma.html

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@
2828
<meta property="og:url" content="https://cpprefjp.github.io/reference/cmath/lgamma.html" />
2929
<meta property="og:site_name" content="cpprefjp - C++日本語リファレンス" />
3030
<meta property="og:type" content="article" />
31-
<meta property="og:description" content="ガンマ関数の絶対値の自然対数を求める" />
31+
<meta property="og:description" content="ガンマ関数 $\Gamma(x)$ ([`tgamma`](tgamma.md)) の絶対値の自然対数を求める" />
3232
<meta name="twitter:card" content="summary" />
3333
<meta name="twitter:title" content="lgamma - cpprefjp C++日本語リファレンス" />
3434
<meta name="twitter:url" content="https://cpprefjp.github.io/reference/cmath/lgamma.html" />
35-
<meta name="twitter:description" content="ガンマ関数の絶対値の自然対数を求める" />
35+
<meta name="twitter:description" content="ガンマ関数 $\Gamma(x)$ ([`tgamma`](tgamma.md)) の絶対値の自然対数を求める" />
3636

3737

3838
<link rel="alternate" type="application/atom+xml" title="Atom" href="https://cpprefjp.github.io/rss.xml" />
@@ -204,12 +204,12 @@
204204

205205
<p class="text-right"><small>
206206
最終更新日時(UTC):
207-
<span itemprop="datePublished" content="2024-06-11T13:45:38">
208-
2024年06月11日 13時45分38秒
207+
<span itemprop="datePublished" content="2025-02-09T07:31:26">
208+
2025年02月09日 07時31分26秒
209209
</span>
210210
<br/>
211211
<span itemprop="author" itemscope itemtype="http://schema.org/Person">
212-
<span itemprop="name">Akira Takahashi</span>
212+
<span itemprop="name">Koichi Murase</span>
213213
</span>
214214
が更新
215215
</small></p>
@@ -257,7 +257,7 @@
257257
</code></pre></div>
258258
</p>
259259
<h2>概要</h2>
260-
<p>ガンマ関数の絶対値の自然対数を求める</p>
260+
<p>ガンマ関数 $\Gamma(x)$ (<code><a href="tgamma.html">tgamma</a></code>) の絶対値の自然対数を求める</p>
261261
<ul>
262262
<li>(1) : <code>float</code>に対する<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a></li>
263263
<li>(2) : <code>double</code>に対する<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a></li>
@@ -282,6 +282,8 @@ <h2>備考</h2>
282282
</ul>
283283
</li>
284284
<li>C++23では、(1)、(2)、(3)が(4)に統合され、<a class="cpprefjp-defined-word" data-desc="&lt;stdfloat&gt;で定義される内部表現の規定された浮動小数点数型" href="../stdfloat.html">拡張浮動小数点数型</a>を含む浮動小数点数型への<a class="cpprefjp-defined-word" data-desc="同名の関数を異なる引数・テンプレート・制約などで複数定義すること。または同名の関数の集合">オーバーロード</a>として定義された</li>
285+
<li>この関数はガンマ関数 (<code><a href="tgamma.html">tgamma</a></code>) がオーバーフローするような場合に使う。
286+
具体例については<a href="tgamma.html#remarks-lgamma">ガンマ関数の備考</a>を参照のこと。</li>
285287
</ul>
286288
<h2></h2>
287289
<p><div class="yata" id="e06461d53d3f46b450ed691f1eb9ec7ffec6bb59"><div class="codehilite"><pre><span></span><code><span class="cp">#include</span> <span class="cpf"><a href="../cmath.html">&lt;cmath&gt;</a></span><span class="cp"></span>
@@ -324,6 +326,10 @@ <h4>備考</h4>
324326
<ul>
325327
<li>GCC 4.6.1 以上</li>
326328
</ul>
329+
<h2>関連項目</h2>
330+
<ul>
331+
<li>ガンマ関数 <code><a href="tgamma.html">tgamma</a></code></li>
332+
</ul>
327333
<h2>参照</h2>
328334
<ul>
329335
<li><a href="https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2022/p1467r9.html" target="_blank">P1467R9 Extended floating-point types and standard names</a><ul>

0 commit comments

Comments
 (0)