Hi John, On 2019-06-27 18:28, John Cowan wrote: > Don't forget to cast them to double, however.
Good point. Updated version attached. > To get a negative zero you need an initialized global variable: I'm not sure we need a negative zero here, do we? Evan
>From 40ee7d67559a49515f2a8f6738f43139ac62337c Mon Sep 17 00:00:00 2001 From: Evan Hanson <ev...@foldling.org> Date: Thu, 27 Jun 2019 16:34:36 +1200 Subject: [PATCH] Emit C99 constants for +nan.0 and [+-]inf.0 `##core#float' nodes The unboxing pass added in 79cf7427 introduces a `##core#float' type to the closure-converted language, for which floating point literals are emitted inline. This also needs to handle NaN and infinite values. For these, we use the NAN and INFINITY constants defined by C99. We also adds a cast to "double" for all inline flonums. Fixes #1626. --- c-backend.scm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/c-backend.scm b/c-backend.scm index 2ef2337f..10134fbc 100644 --- a/c-backend.scm +++ b/c-backend.scm @@ -127,7 +127,13 @@ (gen "lf[" (first params) #\])) ) ) ((##core#float) - (gen (first params))) + (let ((n (first params))) + (gen "(double)") + (cond ((nan? n) (gen "NAN")) + ((infinite? n) + (when (negative? n) (gen #\-)) + (gen "INFINITY")) + (else (gen n))))) ((if) (gen #t "if(C_truep(") -- 2.21.0
_______________________________________________ Chicken-hackers mailing list Chicken-hackers@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-hackers