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.

**Note:**See TracTickets for help on using tickets.