By the way, speaking of floating-point precision, is there a real reason why 
haskell forces us to write :

foreign import ccall unsafe "math.h frexp" c_frexp::CDouble->(Ptr CInt)->IO ()
foreign import ccall unsafe "math.h ldexp" c_ldexp::CDouble->CInt->IO CDouble

ulp::Double->Double
ulp x=unsafePerformIO $ do
  expon<-alloca (\e->do
                    c_frexp (realToFrac x) e
                    peek e)
  (c_ldexp 0.5 $ expon-52) >>= return.realToFrac

To allow us to change the IEEE-754 rounding mode ? Shouldn't it be rather 
"roundDown $ x+3*y/z" or "roundUp $ (cos x)**y" ?

Moreover, due to laziness it appears quite difficult (at least to me !) to 
implement these roundDown and roundUp functions with C calls to select a 
hardware rounding mode, then unsafePerformIO. It would be way faster than an 
allocation (on the stack, I agree), then C calls with a memory access (probably 
cached, but...) in between !

Does anyone know how this translates to LLVM (maybe in the forthcoming GHC 
backend) ?
If anyone has got an answer or a solution...

Cheers,
PE

El 21/05/2010, a las 17:10, Don Stewart escribió:

> dvde:
>> Dear Haskellers,
>> 
>> I just want to share an observation. I had to convert a Double to a  
>> Float value in an inner loop of an application, and I used somethin like  
>> this:
>> 
>> xf = (fromRational $ toRational xd) :: Float
>> 
>> The program works on windows but it did not on OSX - it was too slow.  
>> Now, after big headaches and much frustration, I replaced the code above  
>> with this line (why didn't I come up with this earlier?):
>> 
>> xf = double2Float xd
>> 
>> and now everything works just fine.
>> 
>> I am not really surprised by the speed-up (and no-one should be), but I  
>> am still surprised how often such kinds of unobvious problems occur  
>> while programming in Haskell. So I write this email just to remind me  
>> and you to look out for such pitfalls.
> 
> There's no rewrite rule for this optimization. There's a ticket though
> with some of the solutions.
> 
> -- Don
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to