
13 Jun
2011
13 Jun
'11
12:03 p.m.
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