[racket-dev] Subnormal numbers?

2011-11-29 Thread J. Ian Johnson
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


Re: [racket-dev] Subnormal numbers?

2011-11-29 Thread Neil Toronto
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