我正在研究一些不同的算法来计算某些数字,例如PI。有什么方法可以计算出准确的位数?
即
real_pi = 3.141592
calc_pi = 3.141259
accuracy(calc_pi, real_pi) = 4 #i.e. accurate to 4 places
我似乎无法找到正确的子字符串函数(例如,如果1415重复会怎么样?如果要在接近开头检查,那么接近结尾的子字符串方式将不正确。)
答案 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