From: Daniel Fischer Date: Sun, 24 Oct 2010 19:07:07 +0000 (+0000) Subject: Cache for powers of 10 X-Git-Url: http://git.megacz.com/?p=ghc-base.git;a=commitdiff_plain;h=3aa288879627ae55480c919c1b23fb28ca09e536 Cache for powers of 10 Add a cache for commonly needed powers of 10 to speed up floatToDigits. --- diff --git a/GHC/Float.lhs b/GHC/Float.lhs index e0cc415..a353cc6 100644 --- a/GHC/Float.lhs +++ b/GHC/Float.lhs @@ -785,11 +785,20 @@ expt base n = if base == 2 && n >= minExpt && n <= maxExpt then expts!n else - base^n + if base == 10 && n <= maxExpt10 then + expts10!n + else + base^n expts :: Array Int Integer expts = array (minExpt,maxExpt) [(n,2^n) | n <- [minExpt .. maxExpt]] +maxExpt10 :: Int +maxExpt10 = 324 + +expts10 :: Array Int Integer +expts10 = array (minExpt,maxExpt10) [(n,10^n) | n <- [minExpt .. maxExpt10]] + -- Compute the (floor of the) log of i in base b. -- Simplest way would be just divide i by b until it's smaller then b, but that would -- be very slow! We are just slightly more clever.