I can't answer the question about underflow. But if you don't mind installing a nightly build of Racket, you get the (currently undocumented) module `unstable/flonum', which exports these:

    flonum->bit-field
    bit-field->flonum
    flonum->ordinal    ; number of flonums away from 0 (+ or -)
    ordinal->flonum
    flstep        ; the flonum n steps away (by ordering fl<)
    flnext        ; next largest flonum (by ordering fl<)
    flprev        ; next smallest flonum (by ordering fl<)
    -max.0        ; negative flonum with greatest non-infinite magnitude
    -min.0        ; negative flonum with smallest nonzero magnitude
    +min.0        ; positive flonum with smallest nonzero magnitude
    +max.0        ; positive flonum with greatest non-infinite magnitude

Also, the `plot' module in the nightly build deals just fine with intervals that are too small to represent using flonums. For example, to illustrate floating-point discretization and the density of flonums at different ranges:

#lang racket

(require plot unstable/flonum)

(plot (function (λ (x) (inexact->exact (sin x)))
                (flstep 0.0 -10) (flstep 0.0 10)))

(- (flonum->ordinal 1.0) (flonum->ordinal 0.0))
(- (flonum->ordinal 2.0) (flonum->ordinal 1.0))
(- (flonum->ordinal 3.0) (flonum->ordinal 2.0))
(- (flonum->ordinal +max.0) (flonum->ordinal 1.0))

(parameterize ([plot-x-ticks  (log-ticks #:base 2)])
  (plot (function (compose flonum->ordinal exact->inexact) 1.0 8.0)))


Neil T


On 11/29/2011 09:32 AM, J. Ian Johnson wrote:
I'm currently proctoring the freshmen's lab on inexact numbers and was curious 
how to denote subnormal numbers in Racket.
Turns out that's not possible, since there is no underflow. Why does Racket 
follow the old standard of representing underflow with inexact zero?
I imagine changing it now would break a lot of code, but I'm just curious.
-Ian
_________________________________________________
   For list-related administrative tasks:
   http://lists.racket-lang.org/listinfo/dev

_________________________________________________
 For list-related administrative tasks:
 http://lists.racket-lang.org/listinfo/dev

Reply via email to