File tree Expand file tree Collapse file tree 1 file changed +11
-2
lines changed Expand file tree Collapse file tree 1 file changed +11
-2
lines changed Original file line number Diff line number Diff line change @@ -154,14 +154,23 @@ real sgnGamma(real x)
154
154
*/
155
155
real beta (real x, real y)
156
156
{
157
- if ((x+ y)> MAXGAMMA )
157
+ if (x > MAXGAMMA || y > MAXGAMMA || (x+ y)> MAXGAMMA )
158
158
{
159
- return exp (logGamma(x) + logGamma(y) - logGamma(x+ y));
159
+ const sgnB = sgnGamma(x) * sgnGamma(y) / sgnGamma(x+ y);
160
+ return sgnB * exp(logGamma(x) + logGamma(y) - logGamma(x+ y));
160
161
} else return gamma(x) * gamma(y) / gamma(x+ y);
161
162
}
162
163
163
164
@safe unittest
164
165
{
166
+ assert (beta(0.6 * MAXGAMMA , 0.5 * MAXGAMMA ) > 0 );
167
+ assert (beta(2 * MAXGAMMA , - 0.5 ) < 0 );
168
+ assert (beta(- 0.1 , 2 * MAXGAMMA ) < 0 );
169
+ assert (beta(- 1.6 , 2 * MAXGAMMA ) > 0 );
170
+ assert (beta(+ 0 ., 2 * MAXGAMMA ) == real .infinity);
171
+ assert (beta(- 0 ., 2 * MAXGAMMA ) == - real .infinity);
172
+ assert (beta(- MAXGAMMA - 1.5 , MAXGAMMA + 1 ) < 0 );
173
+ assert (isNaN(beta(- 1 , 2 * MAXGAMMA )));
165
174
assert (isIdentical(beta(NaN(0xABC ), 4 ), NaN(0xABC )));
166
175
assert (isIdentical(beta(2 , NaN(0xABC )), NaN(0xABC )));
167
176
}
You can’t perform that action at this time.
0 commit comments