Skip to content

Commit

Permalink
Preview PR 1407: 7fdc2d3304f099
Browse files Browse the repository at this point in the history
  • Loading branch information
github-actions[bot] committed Feb 9, 2025
1 parent 96b55a1 commit c03da76
Show file tree
Hide file tree
Showing 5 changed files with 34 additions and 32 deletions.
2 changes: 1 addition & 1 deletion gen/pull/1407/reference/chrono/make24.html
Original file line number Diff line number Diff line change
Expand Up @@ -239,7 +239,7 @@ <h2>例</h2>
<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">,</span> <span class="nb">false</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">0h</a></span><span class="p">);</span>

<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">,</span> <span class="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">12h</a></span><span class="p">);</span>
<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">1h</a></span><span class="p">,</span> <span class="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="n"><a href="duration/op_h.html">3h</a></span><span class="p">);</span>
<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">1h</a></span><span class="p">,</span> <span class="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1u</span><span class="n">wGkozNrZqBAcmZszDyPQrhRGXVFYDlw</span><span class="p">);</span>
<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">3h</a></span><span class="p">,</span> <span class="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">15h</a></span><span class="p">);</span>
<span class="n"><a href="../cassert/assert.html">assert</a></span><span class="p">(</span><span class="n"><span style="color:#ff0000">chrono::make24</span></span><span class="p">(</span><span class="n"><a href="duration/op_h.html">11h</a></span><span class="p">,</span> <span class="nb">true</span><span class="p">)</span> <span class="o">==</span> <span class="n"><a href="duration/op_h.html">23h</a></span><span class="p">);</span>
<span class="p">}</span>
Expand Down
2 changes: 1 addition & 1 deletion gen/pull/1407/reference/cmath/assoc_legendre.html
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ <h3>負の m の対応</h3>
<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>
<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>
<span class="k">else</span>
<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">std</span><span class="o">::</span><span class="n">tgamma</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">std</span><span class="o">::</span><span class="n">tgamma</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>
<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>
<span class="p">}</span>
</code></pre></div>
</p>
Expand Down
6 changes: 3 additions & 3 deletions gen/pull/1407/reference/cmath/sph_legendre.html
Original file line number Diff line number Diff line change
Expand Up @@ -284,8 +284,8 @@ <h2>備考</h2>
</ul>
<h3>球面調和関数</h3>
<p>球面調和関数として使う場合には $\phi$ 依存性は自分で与える必要がある。
また、$m\ge0$ にしか対応していないので $m &lt; 0$ の時は、自分で $Y_l^{|m|}(\theta,0)$ の値を調節して使う必要がある。
ルジャンドル陪関数の性質 $P_l^{-m}(x) = (-1)^m [(l - m)!/(l + m)!] P_l^m(x)$ より、
また、この標準関数は $m\ge0$ にしか対応していないので$m &lt; 0$ の時の球面調和関数を計算したければ自分で $Y_l^{|m|}(\theta,0)$ の値を調節して使う必要がある。
ルジャンドル陪関数の性質 $P_l^{-m}(x) = (-1)^m [(l - m)!/(l + m)!] P_l^m(x)$ より、一般の $m$ の球面調和関数は
$$
\begin{align*}
Y_l^m(\theta, \phi)
Expand Down Expand Up @@ -323,7 +323,7 @@ <h3>球面調和関数</h3>
<span class="cp">#include</span> <span class="cpf"><a href="../numbers.html">&lt;numbers&gt;</a></span><span class="cp"></span>

<span class="c1">// 実数球面調和関数の実装例</span>
<span class="kt">double</span> <span class="nf">real_sph_harmonics_real</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">theta</span><span class="p">,</span> <span class="kt">double</span> <span class="n">phi</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">double</span> <span class="nf">real_sph_harmonics</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">theta</span><span class="p">,</span> <span class="kt">double</span> <span class="n">phi</span><span class="p">)</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">m</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="k">return</span> <span class="n"><span style="color:#ff0000">std::sph_legendre</span></span><span class="p">(</span><span class="n">l</span><span class="p">,</span> <span class="mi">0u</span><span class="p">,</span> <span class="n">theta</span><span class="p">);</span>
<span class="k">else</span> <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>
Expand Down
19 changes: 10 additions & 9 deletions gen/pull/1407/reference/cmath/tgamma.html
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@

</head>
<body>
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;cmath&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp11&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;0af25ae61991851a8c402cce3b00377feafad825&#34;, &#34;source&#34;: &#34;#include &lt;cmath&gt;\n#include &lt;iostream&gt;\nint main() {\n std::cout &lt;&lt; std::tgamma(2023.0) / std::tgamma(2022.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; std::exp(std::lgamma(2023.0) - std::lgamma(2022.0)) &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;0afbc54b1281f3f934a20a4e60b8eaf934673a15&#34;, &#34;source&#34;: &#34;#include &lt;cmath&gt;\n#include &lt;iostream&gt;\n#include &lt;limits&gt;\n\nint main() {\n std::cout &lt;&lt; std::fixed;\n std::cout &lt;&lt; \&#34;tgamma(-\u221e) = \&#34; &lt;&lt; std::tgamma(-std::numeric_limits&lt;double&gt;::infinity()) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(-1) = \&#34; &lt;&lt; std::tgamma(-1.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(0) = \&#34; &lt;&lt; std::tgamma(0.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(0.5) = \&#34; &lt;&lt; std::tgamma(0.5) &lt;&lt; std::endl; // sqrt(pi)\n std::cout &lt;&lt; \&#34;tgamma(1) = \&#34; &lt;&lt; std::tgamma(1.0) &lt;&lt; std::endl; // 0!\n std::cout &lt;&lt; \&#34;tgamma(+\u221e) = \&#34; &lt;&lt; std::tgamma(std::numeric_limits&lt;double&gt;::infinity()) &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;cmath&#34;, &#34;tgamma&#34;]}">
<header data-kunai-mdinfo="{&#34;meta&#34;: {&#34;header&#34;: [&#34;cmath&#34;], &#34;namespace&#34;: [&#34;std&#34;], &#34;id-type&#34;: [&#34;function&#34;], &#34;cpp&#34;: [&#34;cpp11&#34;]}, &#34;sources&#34;: [{&#34;id&#34;: &#34;f82bf495e2444a250b3783e24beb4b278a7ba10a&#34;, &#34;source&#34;: &#34;#include &lt;cmath&gt;\n#include &lt;iostream&gt;\nint main() {\n std::cout &lt;&lt; std::tgamma(2026.0) / std::tgamma(2025.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; std::exp(std::lgamma(2026.0) - std::lgamma(2025.0)) &lt;&lt; std::endl;\n}\n&#34;}, {&#34;id&#34;: &#34;0afbc54b1281f3f934a20a4e60b8eaf934673a15&#34;, &#34;source&#34;: &#34;#include &lt;cmath&gt;\n#include &lt;iostream&gt;\n#include &lt;limits&gt;\n\nint main() {\n std::cout &lt;&lt; std::fixed;\n std::cout &lt;&lt; \&#34;tgamma(-\u221e) = \&#34; &lt;&lt; std::tgamma(-std::numeric_limits&lt;double&gt;::infinity()) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(-1) = \&#34; &lt;&lt; std::tgamma(-1.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(0) = \&#34; &lt;&lt; std::tgamma(0.0) &lt;&lt; std::endl;\n std::cout &lt;&lt; \&#34;tgamma(0.5) = \&#34; &lt;&lt; std::tgamma(0.5) &lt;&lt; std::endl; // sqrt(pi)\n std::cout &lt;&lt; \&#34;tgamma(1) = \&#34; &lt;&lt; std::tgamma(1.0) &lt;&lt; std::endl; // 0!\n std::cout &lt;&lt; \&#34;tgamma(+\u221e) = \&#34; &lt;&lt; std::tgamma(std::numeric_limits&lt;double&gt;::infinity()) &lt;&lt; std::endl;\n}\n&#34;}], &#34;page_id&#34;: [&#34;reference&#34;, &#34;cmath&#34;, &#34;tgamma&#34;]}">
<nav class="navbar navbar-default" role="navigation">
<div class="container-fluid">
<div class="navbar-header">
Expand Down Expand Up @@ -287,22 +287,23 @@ <h2>備考</h2>
<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>
</ul>
<h3><a href="#remarks-lgamma" id="remarks-lgamma">lgamma との使い分け</a></h3>
<p>ガンマ関数は急激に増加し容易にオーバーフローするので、代わりにガンマ関数の結果を対数で返す関数 <code><a href="lgamma.html">lgamma</a></code> を用いた方が良いことが多くある。
例えばガンマ関数の比を計算する場合には、 ガンマ関数の対数の差を取ってから <code><a href="exp.html">std::exp</a></code> を適用するのが懸命である。</p>
<p>$$ \frac{\Gamma(102)}{\Gamma(100)} = \exp[\ln\Gamma(102) - \ln\Gamma(100)] $$</p>
<p><div class="yata" id="0af25ae61991851a8c402cce3b00377feafad825"><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>
<p>ガンマ関数は急激に増加し容易にオーバーフローするので、代わりにガンマ関数の結果を自然対数で返す関数 <code><a href="lgamma.html">lgamma</a></code> を用いた方が良いことが多くある。
例えばガンマ関数の比を計算する場合には、 ガンマ関数の対数の差を取ってから指数関数 <code><a href="exp.html">std::exp</a></code> を適用するのが懸命である。</p>
<p>$$ \frac{\Gamma(2026)}{\Gamma(2025)} = \exp[\ln\Gamma(2026) - \ln\Gamma(2025)] $$</p>
<p><div class="yata" id="f82bf495e2444a250b3783e24beb4b278a7ba10a"><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>
<span class="cp">#include</span> <span class="cpf"><a href="../iostream.html">&lt;iostream&gt;</a></span><span class="cp"></span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">()</span> <span class="p">{</span>
<span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="n"><span style="color:#ff0000">std::tgamma</span></span><span class="p">(</span><span class="mf">2023.0</span><span class="p">)</span> <span class="o">/</span> <span class="n"><span style="color:#ff0000">std::tgamma</span></span><span class="p">(</span><span class="mf">2022.0</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
<span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">exp</span><span class="p">(</span><span class="n"><span style="color:#0088cc">std::lgamma</span></span><span class="p">(</span><span class="mf">2023.0</span><span class="p">)</span> <span class="o">-</span> <span class="n"><span style="color:#0088cc">std::lgamma</span></span><span class="p">(</span><span class="mf">2022.0</span><span class="p">))</span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
<span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="n"><span style="color:#ff0000">std::tgamma</span></span><span class="p">(</span><span class="mf">2026.0</span><span class="p">)</span> <span class="o">/</span> <span class="n"><span style="color:#ff0000">std::tgamma</span></span><span class="p">(</span><span class="mf">2025.0</span><span class="p">)</span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
<span class="n"><a href="../iostream/cout.html">std::cout</a></span> <span class="o">&lt;&lt;</span> <span class="n">std</span><span class="o">::</span><span class="n">exp</span><span class="p">(</span><span class="n"><span style="color:#0000ff">std::lgamma</span></span><span class="p">(</span><span class="mf">2026.0</span><span class="p">)</span> <span class="o">-</span> <span class="n"><span style="color:#0000ff">std::lgamma</span></span><span class="p">(</span><span class="mf">2025.0</span><span class="p">))</span> <span class="o">&lt;&lt;</span> <span class="n"><a href="../ostream/endl.html">std::endl</a></span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div>
</div></p>
<p>出力例</p>
<p><pre><code>-nan
2022
2025
</code></pre></p>
<p>ただし、<code>lgamma</code> は飽くまでガンマ関数の「絶対値」の対数であることに注意する。
<p>上の結果では、直接ガンマ関数を計算した場合はオーバーフローによって inf / inf となり最終結果が nan になっているが、<code>lgamma</code> を使った場合には正しい値が計算できている。
ただし、<code>lgamma</code> は飽くまでガンマ関数の「絶対値」の対数であることに注意する。
ガンマ関数の引数が負になる場合はガンマ関数が負になりうるので符号は別に求める必要がある。</p>
<h2></h2>
<p><div class="yata" id="0afbc54b1281f3f934a20a4e60b8eaf934673a15"><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>
Expand Down
Loading

0 comments on commit c03da76

Please sign in to comment.