Python - 查找数字精确到多少位数?

时间:2015-12-29 04:00:09

标签: python string math pattern-matching

我正在研究一些不同的算法来计算某些数字,例如PI。有什么方法可以计算出准确的位数?

real_pi = 3.141592
calc_pi = 3.141259
accuracy(calc_pi, real_pi) = 4 #i.e. accurate to 4 places

我似乎无法找到正确的子字符串函数(例如,如果1415重复会怎么样?如果要在接近开头检查,那么接近结尾的子字符串方式将不正确。)

4 个答案:

答案 0 :(得分:2)

因为你暗示了一种子串方式:

In [39]: real_pi = 3.141592

In [40]: calc_pi = 3.141259

In [41]: sum(1 for _ in itertools.takewhile(lambda t:t[0]==t[1], zip(str(calc_pi), str(real_pi))))
Out[41]: 5

答案 1 :(得分:1)

在python中,math.pi拥有你可以期待的最精确的pi。你可以减去他们的math.pi和你的pi之间的差异,并采取日志的负数来看它是多么准确。

import math
fake_pi=3.1415
print -math.log10(abs(math.pi-fake_pi)) #not sure which is greater

答案 2 :(得分:1)

你不应该比较字符串的准确性..而且pi肯定超过6位数。 更好的设计是使用round(值,数字)并比较相等。 例如my_pi = 3.14,actual_pi = 3.1 如果是round(my_pi,1)== actual_pi:    打印" 1"

答案 3 :(得分:0)

根据您对准确性的定义:

def accuracy( real_pi, calc_pi ):
    str_real_pi = str( real_pi )
    str_calc_pi = str( calc_pi )
    correct = 0
    for i in range( len(str_real_pi) ):
        if str_real_pi[i] != str_calc_pi[i]:
            break
        correct += 1
    return correct - 2

real_pi = 3.141592
calc_pi = 3.141259
print(accuracy(calc_pi, real_pi))
# prints 3, meaning 3 digits are correct after the dot