# [racket-dev] exact 0 and floating point operations

I think that `*', `/', `lcm', `expt, and `exp' are the only operations
that produce an exact result when given some inexact arguments. The
`exp' and `expt' cases were documented before, and I've clarified the
rest in the docs.
The docs now also note that `sin', `tan', `asin', and `atan' produce an
exact 0 when given an exact 0.
Finally, the `atan' procedure now returns an exact 0 when it is given
two arguments, the first is an exact 0, and the second is an exact
positive number.
Why all the special cases? If I remember correctly, it makes
complex-number calculations work more naturally when you have an exact
zero as a real or imaginary part. In any case, after spending some time
on this at one point, I concluded that the special cases are worthwhile
(and that imitating Gambit in this area is a good rule of thumb).
At Fri, 11 Jun 2010 16:28:35 -0400, Sam Tobin-Hochstadt wrote:
>* Currently, when given inputs some of which are floats, `*', `+', '/'
*>* and `-' almost always produce floats. However, there are some cases
*>* where this is not true:
*>*
*>* (* flt 0)
*>* (/ 0 flt)
*>*
*>* Unfortunately, this makes the job of the typechecker and optimizer
*>* harder (since * and / don't have the closure properties you'd want).
*>* It's also not fully documented. Here's the quote from the
*>* documentation:
*>*
*>* "Certain operations on inexact numbers, however, produce an exact
*>* number, such as multiplying an inexact number with an exact 0."
*>*
*>* I'd like it if these were changed to always produce floats, but I'd
*>* settle for complete documentation so that I can give everything the
*>* right type.
*>* --
*>* sam th
*>* samth at ccs.neu.edu
*>* _________________________________________________
*>* For list-related administrative tasks:
*>* http://lists.racket-lang.org/listinfo/dev
*