Python中的math.log

时间:2013-02-08 01:34:19

标签: python

我正在编写一个Python程序,在输入的数字之前打印所有10的幂。例如,如果输入是12345,程序应输出10,100,1000,10000。这是我的程序 -

import math
limit = raw_input('Check until: ');
tenpowers=1
for i in range(1, int(limit)+1):
     if math.log(i, 10)==tenpowers:
         print 'tenpower! - ', i
         tenpowers=tenpowers+1

仅当输入值小于或等于100时,我的程序才能正常工作。这是输出 -

D:\py>python prog.py
Check until: 100
tenpower! -  10
tenpower! -  100

D:\py>python prog.py
Check until: 12345
tenpower! -  10
tenpower! -  100

注意第二次输入12345时它仍然只输出10和100.这里出了什么问题?

2 个答案:

答案 0 :(得分:2)

math.log使用浮动,这几乎总是涉及一些舍入错误。

>>> math.log(1000, 10)
2.9999999999999996

如果你需要它是准确的,你应该改变算法以产生10的幂(简单地将最后的功率乘以10)并且只要新功率小于你的输入数就继续。

>>> limit = 12345
>>> power = 10
>>> while power < limit:
...     print power
...     power = power * 10
... 
10
100
1000
10000

这保证是精确的,因为它不涉及任何浮点数。 (而且速度也快得多)

答案 1 :(得分:1)

Floating-point math再次罢工!查看math.log返回的值:

>>> math.log(10000, 10)
4.0
>>> math.log(1000, 10)
2.9999999999999996
>>> math.log(100, 10)
2.0
>>> math.log(10, 10)
1.0