[Haskell-cafe] GHC handles badly with math formulas

Chris Smith cdsmith at gmail.com
Mon Jun 13 18:03:03 CEST 2011


On Mon, 2011-06-13 at 19:46 +0400, Grigory Sarnitskiy wrote:
> I've noted several times that GHC doesn't evaluate formulas for Double values during compilation.
> 
> That is using
> 4.2326514735445615 instead of (512 / 0.844)**(1/3)
> or
> 0.906179845938664 instead of (1/3) * sqrt(5 + 2 * sqrt(10 / 7))

Yep, looks that way.  It's the square roots and powers that GHC is not
applying.  Where you've got divisions between constants, those are
getting applied at compile time.

> This can lead to significant slowdown if such values are called often.

If you assign them to a global name, then lazy evaluation will take care
of it.  It looks like GHC is even throwing in a specialization for
Double when I give the global name a polymorphic type.

-- 
Chris Smith





More information about the Haskell-Cafe mailing list