I am trying to calculate the length of an Integer in Haskell, using the fact that the length is equal to truncate (log10(x)+1)
.
Using Integers I created:
len :: Integer -> Integer
len i = toInteger (truncate (logBase 10 (fromIntegral i)) + 1)
Unfortunately, not all numbers get the correct length. I tried a few different cases and found that:
logBase 10 10 = 1.0
logBase 10 100 = 2.0
logBase 10 1000 = 2.9999..6
logBase 10 10000 = 4.0
logBase 10 100000 = 5.0
logBase 10 1000000 = 5.9999999
Is there a reason why logBase 10 1000
doesn't return 3.0? How do I get the correct log-value for 1000 in base 10?