From 186d63a2cc287cfd908342c62f18d123341c20c3 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Thu, 6 Mar 2008 21:32:25 +0000 Subject: [PATCH] commit Solaris (round -0.0) workaround svn: r8906 --- src/mzscheme/sconfig.h | 4 ++++ src/mzscheme/src/number.c | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/src/mzscheme/sconfig.h b/src/mzscheme/sconfig.h index e2670cc071..f9caa44cf8 100644 --- a/src/mzscheme/sconfig.h +++ b/src/mzscheme/sconfig.h @@ -110,6 +110,8 @@ # define USE_ON_EXIT_FOR_ATEXIT # endif +#define FMOD_CAN_RETURN_POS_ZERO + # ifndef i386 # define FLUSH_SPARC_REGISTER_WINDOWS # endif @@ -1216,6 +1218,8 @@ /* FMOD_CAN_RETURN_NEG_ZERO is fmod() on positive numbers can produce a negative zero. */ + /* FMOD_CAN_RETURN_POS_ZERO is fmod() on -0.0 can produce 0.0. */ + /* LOG_ZERO_ISNT_NEG_INF defines a version of log that checks for an inexact zero argument and return negative infinity. */ diff --git a/src/mzscheme/src/number.c b/src/mzscheme/src/number.c index 17ab4787f3..a187de893f 100644 --- a/src/mzscheme/src/number.c +++ b/src/mzscheme/src/number.c @@ -1219,6 +1219,11 @@ sch_round (int argc, Scheme_Object *argv[]) double i, frac; int invert; +#ifdef FMOD_CAN_RETURN_POS_ZERO + if (minus_zero_p(d)) + return d; +#endif + if (d < 0) { d = -d; invert = 1;