Как я могу установить точность числа, чтобы иметь 10 десятичных цифр, используя модуль Python gmpy2
Я создал следующий кусок кода Python. Сначала следует установить точность чисел до 10 десятичных цифр, но при печати pi отображается 3,156, который имеет только 3 десятичных цифры! Кто-нибудь, пожалуйста, дайте мне знать, что я делаю неправильно.
import gmpy2 as g
from ipywidgets import widgets
from IPython.display import display
button = widgets.Button(description="Click Me!")
display(button)
max_precision = g.get_max_precision()
pi = g.const_pi()
g.set_context(g.context())
def set_bits_precision(decimal_precision):
bits_precision = int(decimal_precision/g.log(2))
if (bits_precision > max_precision): bits_precision = max_precision
ctx = g.get_context()
ctx.precision = bits_precision
return
def square_root(number):
return g.sqrt(number)
def circle_perimeter(radius):
return 2*pi*radius
def on_button_clicked(x):
return square_root(x)
set_bits_precision(10)
print(pi)
button.on_click(on_button_clicked(2))
1 ответ
Вы можете использовать следующую функцию, чтобы получить точность в соответствии с нужным количеством цифр.
>>> import gmpy2 as gmp
# n is the number of digits
>>> def gmp_prec(n): return int(n * gmp.log(10) / gmp.log(2)) + 1
Предположим, вам нужно установить правильную точность, чтобы получить десять значащих десятичных цифр, после чего вы сможете писать.
>>> gmp.get_context().precision = gmp_prec(10)
Например, для расчетаsqrt
из2
кgmpy2
с правильным20
цифр после запятой имеем:
>>> gmp.get_context().precision = gmp_prec(20)
Обратите внимание, что,gmp_prec(20)
возвращается67
.
Затем мы можем использовать результат следующим образом:
>>> print(gmp.sqrt(2))
1.414213562373095048804
Приведенный выше результат точен с точностью до 20 знаков после запятой.