From 01d6408def7d1f5153180c206364abec7fe20dcf Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 4 Dec 1998 01:25:05 +0000 Subject: [PATCH] math domain error fix from Charlie Hotchkiss. --- Astro/celestialBody.cxx | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/Astro/celestialBody.cxx b/Astro/celestialBody.cxx index 72bb6359a..35b01e244 100644 --- a/Astro/celestialBody.cxx +++ b/Astro/celestialBody.cxx @@ -27,7 +27,7 @@ #include "star.hxx" #include -#ifdef __BORLANDC__ +#ifdef FG_MATH_EXCEPTION_CLASH # define exception c_exception #endif #include @@ -90,7 +90,19 @@ void CelestialBody::updatePosition(fgTIME *t, Star *ourSun) //of the planet R = sqrt (xg*xg + yg*yg + zg*zg); s = ourSun->getDistance(); - FV = RAD_TO_DEG * acos( (r*r + R*R - s*s) / (2*r*R)); + + // It is possible from these calculations for the argument to acos + // to exceed the valid range for acos(). So we do a little extra + // checking. + + double tmp = (r*r + R*R - s*s) / (2*r*R); + if ( tmp > 1.0) { + tmp = 1.0; + } else if ( tmp < -1.0) { + tmp = -1.0; + } + + FV = RAD_TO_DEG * acos( tmp ); }; /**************************************************************************** -- 2.39.5