Opened 3 weeks ago

#1627 new defect

Negative zero literals are miscompiled

Reported by: johnwcowan Owned by:
Priority: minor Milestone: someday
Component: unknown Version: 5.1.0
Keywords: float, negative zero Cc:
Estimated difficulty: easy

Description

All versions of the Chicken compiler and interpreter (since 5.0 at least) treat the Scheme literal value -0.0 incorrectly. This inexact value is distinct from 0.0 in certain ways: for example, (/ 1.0 0.0) => +inf.0, but (/ 1.0 -0.0) => -inf.0.

Unfortunately, C treats the expression -0.0 as a synonym for 0.0, because in C a prefixed minus sign is always the negation operator and not part of a literal. So generating -0.0 as the C representation of Scheme -0.0 is incorrect. Instead, the C expression (1.0 / (-INFINITY)), where INFINITY is a constant from math.h, should be generated instead.

Change History (0)

Note: See TracTickets for help on using tickets.