Opened 4 months 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.