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 @@ -157,14 +157,23 @@ real sgnGamma(real x)
157
157
*/
158
158
real beta (real x, real y)
159
159
{
160
- if ((x+ y)> MAXGAMMA )
160
+ if (x > MAXGAMMA || y > MAXGAMMA || (x+ y)> MAXGAMMA )
161
161
{
162
- return exp (logGamma(x) + logGamma(y) - logGamma(x+ y));
162
+ const sgnB = sgnGamma(x) * sgnGamma(y) / sgnGamma(x+ y);
163
+ return sgnB * exp(logGamma(x) + logGamma(y) - logGamma(x+ y));
163
164
} else return gamma(x) * gamma(y) / gamma(x+ y);
164
165
}
165
166
166
167
@safe unittest
167
168
{
169
+ assert (beta(0.6 * MAXGAMMA , 0.5 * MAXGAMMA ) > 0 );
170
+ assert (beta(2 * MAXGAMMA , - 0.5 ) < 0 );
171
+ assert (beta(- 0.1 , 2 * MAXGAMMA ) < 0 );
172
+ assert (beta(- 1.6 , 2 * MAXGAMMA ) > 0 );
173
+ assert (beta(+ 0 ., 2 * MAXGAMMA ) == real .infinity);
174
+ assert (beta(- 0 ., 2 * MAXGAMMA ) == - real .infinity);
175
+ assert (beta(- MAXGAMMA - 1.5 , MAXGAMMA + 1 ) < 0 );
176
+ assert (isNaN(beta(- 1 , 2 * MAXGAMMA )));
168
177
assert (isIdentical(beta(NaN(0xABC ), 4 ), NaN(0xABC )));
169
178
assert (isIdentical(beta(2 , NaN(0xABC )), NaN(0xABC )));
170
179
}
You can’t perform that action at this time.
0 commit comments