我试图使用长度等于的事实来计算Haskell中Integer的长度truncate (log10(x)+1).
使用我创建的整数:
len :: Integer -> Integer
len i = toInteger (truncate (logBase 10 (fromIntegral i)) + 1)
Run Code Online (Sandbox Code Playgroud)
不幸的是,并非所有数字都得到正确的长度.我尝试了几个不同的案例,发现:
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
Run Code Online (Sandbox Code Playgroud)
有没有理由logBase 10 1000不返回3.0?如何在基数10中获得1000的正确日志值?