[racket-dev] What are single flonums good for?

 From: Neil Toronto (neil.toronto at gmail.com) Date: Wed Sep 12 13:19:35 EDT 2012 Previous message: [racket-dev] What are single flonums good for? Next message: [racket-dev] What are single flonums good for? Messages sorted by: [date] [thread] [subject] [author]

```On 09/12/2012 10:24 AM, Vincent St-Amour wrote:
> I agree that having to handle single floats when reasoning about numbers
> complicates things, and it annoys me too. But I still think it's less
> problematic than what I describe above [compilation could change the behavior
> of a program].

Interesting!

I think the least problematic solution would be to separate them from
the rest of the numeric tower, and give them their own set of
single-flonum-only functions: sf+, sfabs, etc. They could even operate
on single-precision complex numbers.

Hindsight, etc., though.

>> (: foo (case-> (Single-Flonum -> Single-Flonum)
>>                  (Flonum -> Flonum)
>>                  (Real -> Real)))
>> (define (foo x)
>>     (cond [(double-flonum? x)  (flfoo x)]
>>           [(single-flonum? x)  (real->single-flonum
>>                                 (flfoo (real->double-flonum x)))]
>>           [else  (flfoo (real->double-flonum x))]))
>
> This function already converts rationals to doubles, and it seems
> `flfoo' produces doubles too. You could drop the second clause, always
> produce doubles, change the type to `(Real -> Flonum)' and leave the
> conversion to single to the client. Since the math library always
> operates on doubles internally anyway, this would also eliminate
> unnecessary conversions to singles between stages of a pipeline.

It's not just slower. The unnecessary conversions lose precision because
of double rounding. I hadn't thought of that yet, so thanks.

>> Why do we have these things?
>
> I don't know why they were added originally (as an option). In my limited
> experience, I don't think I've seen non-test code that uses them.

This gets at the design decision I'm facing now. Would anybody care if
the math library just treated them like other non-double-flonum reals,
and made no effort to preserve single-flonum-ness? I'm leaning toward
doing that now.

Neil ⊥

```

 Posted on the dev mailing list. Previous message: [racket-dev] What are single flonums good for? Next message: [racket-dev] What are single flonums good for? Messages sorted by: [date] [thread] [subject] [author]