From 79c265ef893839f2ecad373704e355c0220607dd Mon Sep 17 00:00:00 2001 From: Vincent St-Amour Date: Fri, 3 Aug 2012 12:43:57 -0400 Subject: [PATCH] Fix NaN handling of flexpt to be consistent with expt. --- collects/tests/racket/optimize.rktl | 3 +++ src/racket/src/number.c | 2 ++ 2 files changed, 5 insertions(+) diff --git a/collects/tests/racket/optimize.rktl b/collects/tests/racket/optimize.rktl index 44a7346689..fe7fa8f3d6 100644 --- a/collects/tests/racket/optimize.rktl +++ b/collects/tests/racket/optimize.rktl @@ -410,6 +410,9 @@ (bin-exact 0.0 'flexpt 0.0 10.0 #t) (bin-exact +nan.0 'flexpt 0.0 -1.0 #t) (bin-exact +nan.0 'flexpt 0.0 0.0 #t) + (bin-exact +nan.0 'flexpt +nan.0 2.7 #t) + (bin-exact +nan.0 'flexpt 2.7 +nan.0 #t) + (bin-exact +nan.0 'flexpt +nan.0 +nan.0 #t) (un 1.0 'exact->inexact 1) (un 1073741823.0 'exact->inexact (sub1 (expt 2 30))) diff --git a/src/racket/src/number.c b/src/racket/src/number.c index 8ac33b3074..d8589de568 100644 --- a/src/racket/src/number.c +++ b/src/racket/src/number.c @@ -2735,6 +2735,8 @@ double scheme_double_expt(double x, double y) { return not_a_number_val; else if ((x == 0.0) && (y <= 0)) return not_a_number_val; + else if (isnan(x) || isnan(y)) + return not_a_number_val; else return sch_pow(x, y); }