diff options
Diffstat (limited to 'src/complex')
| -rw-r--r-- | src/complex/cacosf.c | 4 | ||||
| -rw-r--r-- | src/complex/cacosh.c | 2 | ||||
| -rw-r--r-- | src/complex/catan.c | 25 | ||||
| -rw-r--r-- | src/complex/catanf.c | 40 | ||||
| -rw-r--r-- | src/complex/catanl.c | 38 | ||||
| -rw-r--r-- | src/complex/cproj.c | 2 | ||||
| -rw-r--r-- | src/complex/cprojf.c | 2 | ||||
| -rw-r--r-- | src/complex/cprojl.c | 2 | 
8 files changed, 12 insertions, 103 deletions
| diff --git a/src/complex/cacosf.c b/src/complex/cacosf.c index 2e048540..ed8acf0f 100644 --- a/src/complex/cacosf.c +++ b/src/complex/cacosf.c @@ -2,8 +2,10 @@  // FIXME +static const float float_pi_2 = M_PI_2; +  float complex cacosf(float complex z)  {  	z = casinf(z); -	return CMPLXF((float)M_PI_2 - crealf(z), -cimagf(z)); +	return CMPLXF(float_pi_2 - crealf(z), -cimagf(z));  } diff --git a/src/complex/cacosh.c b/src/complex/cacosh.c index 76127f75..55b857ce 100644 --- a/src/complex/cacosh.c +++ b/src/complex/cacosh.c @@ -1,6 +1,6 @@  #include "complex_impl.h" -/* acosh(z) = i acos(z) */ +/* acosh(z) = ±i acos(z) */  double complex cacosh(double complex z)  { diff --git a/src/complex/catan.c b/src/complex/catan.c index ccc2fb53..b4fe552a 100644 --- a/src/complex/catan.c +++ b/src/complex/catan.c @@ -60,29 +60,6 @@  #include "complex_impl.h" -#define MAXNUM 1.0e308 - -static const double DP1 = 3.14159265160560607910E0; -static const double DP2 = 1.98418714791870343106E-9; -static const double DP3 = 1.14423774522196636802E-17; - -static double _redupi(double x) -{ -	double t; -	long i; - -	t = x/M_PI; -	if (t >= 0.0) -		t += 0.5; -	else -		t -= 0.5; - -	i = t;  /* the multiple */ -	t = i; -	t = ((x - t * DP1) - t * DP2) - t * DP3; -	return t; -} -  double complex catan(double complex z)  {  	double complex w; @@ -95,7 +72,7 @@ double complex catan(double complex z)  	a = 1.0 - x2 - (y * y);  	t = 0.5 * atan2(2.0 * x, a); -	w = _redupi(t); +	w = t;  	t = y - 1.0;  	a = x2 + (t * t); diff --git a/src/complex/catanf.c b/src/complex/catanf.c index e10d9c09..faaa907a 100644 --- a/src/complex/catanf.c +++ b/src/complex/catanf.c @@ -55,30 +55,6 @@  #include "complex_impl.h" -#define MAXNUMF 1.0e38F - -static const double DP1 = 3.140625; -static const double DP2 = 9.67502593994140625E-4; -static const double DP3 = 1.509957990978376432E-7; - -static float _redupif(float xx) -{ -	float x, t; -	long i; - -	x = xx; -	t = x/(float)M_PI; -	if (t >= 0.0f) -		t += 0.5f; -	else -		t -= 0.5f; - -	i = t;  /* the multiple */ -	t = i; -	t = ((x - t * DP1) - t * DP2) - t * DP3; -	return t; -} -  float complex catanf(float complex z)  {  	float complex w; @@ -87,29 +63,17 @@ float complex catanf(float complex z)  	x = crealf(z);  	y = cimagf(z); -	if ((x == 0.0f) && (y > 1.0f)) -		goto ovrf; -  	x2 = x * x;  	a = 1.0f - x2 - (y * y); -	if (a == 0.0f) -		goto ovrf;  	t = 0.5f * atan2f(2.0f * x, a); -	w = _redupif(t); +	w = t;  	t = y - 1.0f;  	a = x2 + (t * t); -	if (a == 0.0f) -		goto ovrf;  	t = y + 1.0f;  	a = (x2 + (t * t))/a; -	w = w + (0.25f * logf (a)) * I; -	return w; - -ovrf: -	// FIXME -	w = MAXNUMF + MAXNUMF * I; +	w = CMPLXF(w, 0.25f * logf(a));  	return w;  } diff --git a/src/complex/catanl.c b/src/complex/catanl.c index a9fc02db..cd2d2b00 100644 --- a/src/complex/catanl.c +++ b/src/complex/catanl.c @@ -67,28 +67,6 @@ long double complex catanl(long double complex z)  	return catan(z);  }  #else -static const long double PIL = 3.141592653589793238462643383279502884197169L; -static const long double DP1 = 3.14159265358979323829596852490908531763125L; -static const long double DP2 = 1.6667485837041756656403424829301998703007e-19L; -static const long double DP3 = 1.8830410776607851167459095484560349402753e-39L; - -static long double redupil(long double x) -{ -	long double t; -	long i; - -	t = x / PIL; -	if (t >= 0.0L) -		t += 0.5L; -	else -		t -= 0.5L; - -	i = t;  /* the multiple */ -	t = i; -	t = ((x - t * DP1) - t * DP2) - t * DP3; -	return t; -} -  long double complex catanl(long double complex z)  {  	long double complex w; @@ -97,30 +75,18 @@ long double complex catanl(long double complex z)  	x = creall(z);  	y = cimagl(z); -	if ((x == 0.0L) && (y > 1.0L)) -		goto ovrf; -  	x2 = x * x;  	a = 1.0L - x2 - (y * y); -	if (a == 0.0L) -		goto ovrf;  	t = atan2l(2.0L * x, a) * 0.5L; -	w = redupil(t); +	w = t;  	t = y - 1.0L;  	a = x2 + (t * t); -	if (a == 0.0L) -		goto ovrf;  	t = y + 1.0L;  	a = (x2 + (t * t)) / a; -	w = w + (0.25L * logl(a)) * I; -	return w; - -ovrf: -	// FIXME -	w = LDBL_MAX + LDBL_MAX * I; +	w = CMPLXF(w, 0.25L * logl(a));  	return w;  }  #endif diff --git a/src/complex/cproj.c b/src/complex/cproj.c index 9ae1e17c..d2b8f5a9 100644 --- a/src/complex/cproj.c +++ b/src/complex/cproj.c @@ -3,6 +3,6 @@  double complex cproj(double complex z)  {  	if (isinf(creal(z)) || isinf(cimag(z))) -		return CMPLX(INFINITY, copysign(0.0, creal(z))); +		return CMPLX(INFINITY, copysign(0.0, cimag(z)));  	return z;  } diff --git a/src/complex/cprojf.c b/src/complex/cprojf.c index 03fab339..15a874bb 100644 --- a/src/complex/cprojf.c +++ b/src/complex/cprojf.c @@ -3,6 +3,6 @@  float complex cprojf(float complex z)  {  	if (isinf(crealf(z)) || isinf(cimagf(z))) -		return CMPLXF(INFINITY, copysignf(0.0, crealf(z))); +		return CMPLXF(INFINITY, copysignf(0.0, cimagf(z)));  	return z;  } diff --git a/src/complex/cprojl.c b/src/complex/cprojl.c index 38a494c5..531ffa1c 100644 --- a/src/complex/cprojl.c +++ b/src/complex/cprojl.c @@ -9,7 +9,7 @@ long double complex cprojl(long double complex z)  long double complex cprojl(long double complex z)  {  	if (isinf(creall(z)) || isinf(cimagl(z))) -		return CMPLXL(INFINITY, copysignl(0.0, creall(z))); +		return CMPLXL(INFINITY, copysignl(0.0, cimagl(z)));  	return z;  }  #endif | 
