From: curt Date: Fri, 4 Dec 1998 01:25:05 +0000 (+0000) Subject: math domain error fix from Charlie Hotchkiss. X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=2198498e29925c944b6feab3e1737bd6371b1456;p=simgear.git math domain error fix from Charlie Hotchkiss. --- diff --git a/Astro/celestialBody.cxx b/Astro/celestialBody.cxx index 72bb6359..35b01e24 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 ); }; /****************************************************************************