summaryrefslogtreecommitdiff
path: root/libm/float/betaf.c
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
committerEric Andersen <andersen@codepoet.org>2001-11-22 14:04:29 +0000
commit7ce331c01ce6eb7b3f5c715a38a24359da9c6ee2 (patch)
tree3a7e8476e868ae15f4da1b7ce26b2db6f434468c /libm/float/betaf.c
parentc117dd5fb183afb1a4790a6f6110d88704be6bf8 (diff)
Totally rework the math library, this time based on the MacOs X
math library (which is itself based on the math lib from FreeBSD). -Erik
Diffstat (limited to 'libm/float/betaf.c')
-rw-r--r--libm/float/betaf.c122
1 files changed, 0 insertions, 122 deletions
diff --git a/libm/float/betaf.c b/libm/float/betaf.c
deleted file mode 100644
index 7a1963191..000000000
--- a/libm/float/betaf.c
+++ /dev/null
@@ -1,122 +0,0 @@
-/* betaf.c
- *
- * Beta function
- *
- *
- *
- * SYNOPSIS:
- *
- * float a, b, y, betaf();
- *
- * y = betaf( a, b );
- *
- *
- *
- * DESCRIPTION:
- *
- * - -
- * | (a) | (b)
- * beta( a, b ) = -----------.
- * -
- * | (a+b)
- *
- * For large arguments the logarithm of the function is
- * evaluated using lgam(), then exponentiated.
- *
- *
- *
- * ACCURACY:
- *
- * Relative error:
- * arithmetic domain # trials peak rms
- * IEEE 0,30 10000 4.0e-5 6.0e-6
- * IEEE -20,0 10000 4.9e-3 5.4e-5
- *
- * ERROR MESSAGES:
- *
- * message condition value returned
- * betaf overflow log(beta) > MAXLOG 0.0
- * a or b <0 integer 0.0
- *
- */
-
-/* beta.c */
-
-
-/*
-Cephes Math Library Release 2.2: July, 1992
-Copyright 1984, 1987 by Stephen L. Moshier
-Direct inquiries to 30 Frost Street, Cambridge, MA 02140
-*/
-
-#include <math.h>
-
-#define fabsf(x) ( (x) < 0 ? -(x) : (x) )
-
-#define MAXGAM 34.84425627277176174
-
-
-extern float MAXLOGF, MAXNUMF;
-extern int sgngamf;
-
-#ifdef ANSIC
-float gammaf(float), lgamf(float), expf(float), floorf(float);
-#else
-float gammaf(), lgamf(), expf(), floorf();
-#endif
-
-float betaf( float aa, float bb )
-{
-float a, b, y;
-int sign;
-
-sign = 1;
-a = aa;
-b = bb;
-if( a <= 0.0 )
- {
- if( a == floorf(a) )
- goto over;
- }
-if( b <= 0.0 )
- {
- if( b == floorf(b) )
- goto over;
- }
-
-
-y = a + b;
-if( fabsf(y) > MAXGAM )
- {
- y = lgamf(y);
- sign *= sgngamf; /* keep track of the sign */
- y = lgamf(b) - y;
- sign *= sgngamf;
- y = lgamf(a) + y;
- sign *= sgngamf;
- if( y > MAXLOGF )
- {
-over:
- mtherr( "betaf", OVERFLOW );
- return( sign * MAXNUMF );
- }
- return( sign * expf(y) );
- }
-
-y = gammaf(y);
-if( y == 0.0 )
- goto over;
-
-if( a > b )
- {
- y = gammaf(a)/y;
- y *= gammaf(b);
- }
-else
- {
- y = gammaf(b)/y;
- y *= gammaf(a);
- }
-
-return(y);
-}