[racket-dev] (round), etc. in Typed Racket

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Sat Dec 11 21:47:10 EST 2010

This seems like an unfortunate naming discrepancy.

Robby

On Sat, Dec 11, 2010 at 7:52 PM, Vincent St-Amour <stamourv at ccs.neu.edu> wrote:
> At Sat, 11 Dec 2010 18:35:17 -0700,
> Petey Aldous wrote:
>> I've discovered what may be a bug in the type system of Typed Racket. The
>> functions that round - (round), (truncate), (ceiling), etc. are typed as
>> Real, not Integer; however, the result of (integer? (round (* 10e15
>> (random)))) is consistently true - and the same holds for the other rounding
>> functions.
>
> Typed Racket's Integer type corresponds to racket's exact integers
> (exact-integer?, not integer?).
>
> integer? can return true for floating point numbers:
> (integer? 1.0) -> #t
> but exact-integer? cannot.
>
> The types for round, truncate, etc. take this into account. For
> instance, if you round an exact rational, the type of the result will
> be Integer, whereas if you round a floating point number, you get a
> Float back.
>
>> Is this intentional? If so, why? If it is (or even if it isn't), how can I
>> transform the result of (random) to an Integer?
>
> You can use inexact->exact on the result of round.
>
> Vincent
> _________________________________________________
>  For list-related administrative tasks:
>  http://lists.racket-lang.org/listinfo/dev
>


Posted on the dev mailing list.