From 3aa288879627ae55480c919c1b23fb28ca09e536 Mon Sep 17 00:00:00 2001 From: Daniel Fischer Date: Sun, 24 Oct 2010 19:07:07 +0000 Subject: [PATCH] Cache for powers of 10 Add a cache for commonly needed powers of 10 to speed up floatToDigits. --- GHC/Float.lhs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) 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. -- 1.7.10.4