2015-12-29 4 views
0

Я работаю над несколькими различными алгоритмами для вычисления определенных чисел, таких как PI. Каков способ подсчета количества цифр, в котором это точно?Python - узнать, сколько цифр число точнее?

т.е.

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

Я не могу показаться, чтобы найти нужную функцию подстроки (что, если 1415 повторы, например? Подстроку путь ближе к концу, не было бы правильным, если он предназначен для проверки ближе к началу.)

+0

В этом примере оно точнее до 3-х мест или 4-х мест? – Sait

ответ

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 
+0

элегантное решение. +1 – Sait

+0

Это все еще вне меня, почему OP хотел бы сделать это в подстроке :( – Untitled123

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 
+0

Спасибо, что имеет смысл. При тестировании, 3.141589 и 3.14159 оба возвращаются соответственно 5.4 и 5.5 или около того, как бы я был более кратким? – Alexander

+0

Просто протестировал его, я получаю 5.43728021469 и 5.57616621196 – Untitled123

+0

. Интересно, получаю ли я длину вычисленного pi и получаю подстроку этой длины реального pi, это предотвратит эти дроби (что составляет 5.4 цифры против 5,5 цифры означают для точности? Что такое .4 цифры? Может быть, округление имеет смысл?) – Alexander

1

Вы не должны сравнивать строки для точности .. и pi, конечно, длиннее 6 цифр. Лучшим дизайном было бы использовать круглые (значения, цифры) и сравнивать для равенства. , например. my_pi = 3,14, actual_pi = 3,1 если раунд (my_pi, 1) == actual_pi: печать "1"

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 
Смежные вопросы