1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-17 17:20:29 +02:00

(scm_divide): Correction to 1/complex and <any>/complex,

need to test abs(re)<abs(im) for choice of cases, otherwise divide by
zero when re==0 and im<0.  Reported by Jean Crepeau.
This commit is contained in:
Kevin Ryde 2005-04-29 22:54:35 +00:00
parent 9147cd32d0
commit 1c9c30b6b2

View file

@ -3738,7 +3738,7 @@ scm_divide (SCM x, SCM y)
} else if (SCM_COMPLEXP (x)) {
double r = SCM_COMPLEX_REAL (x);
double i = SCM_COMPLEX_IMAG (x);
if (r <= i) {
if (fabs(r) <= fabs(i)) {
double t = r / i;
double d = i * (1.0 + t * t);
return scm_make_complex (t / d, -1.0 / d);
@ -3782,7 +3782,7 @@ scm_divide (SCM x, SCM y)
{
double r = SCM_COMPLEX_REAL (y);
double i = SCM_COMPLEX_IMAG (y);
if (r <= i) {
if (fabs(r) <= fabs(i)) {
double t = r / i;
double d = i * (1.0 + t * t);
return scm_make_complex ((a * t) / d, -a / d);
@ -3873,7 +3873,7 @@ scm_divide (SCM x, SCM y)
} else if (SCM_COMPLEXP (y)) {
double ry = SCM_COMPLEX_REAL (y);
double iy = SCM_COMPLEX_IMAG (y);
if (ry <= iy) {
if (fabs(ry) <= fabs(iy)) {
double t = ry / iy;
double d = iy * (1.0 + t * t);
return scm_make_complex ((rx * t + ix) / d, (ix * t - rx) / d);