from mpmath import *
mp.prec=24
cyfry = 10
mp.prec
to liczba określająca dokładność (jako liczba cyfr dwójkowych). Precyzję, jako liczbę cyfr dziesietnych definiuje funkcja mp.dps
.
Typ float
języka C to 24 ctfry dwójkowe, czyjli jakieś 7.2 cyfry dziesiętnej
Typ double
języka C to 53 cyfry dqójkowe, czyli jakieś 15.8 cyfr dziesiętnych
O wewnętrznej reprezentacji liczb zmiennoprzecinkowych mozna poczytać tu.
cyfry
to liczba cyfr na wydruku kolejnych wartości.
Funkcja mpf()
pozwala nadać zmiennej zadaną wartość o wielokrotnej precyzji. Lepiej wartości zapisywać jako napisy (używając pojedynczych cudzysłowów). W przeciwnym razie może być dokonywana kilkukrotna konwersja. Należy zadbać również, żeby w obliczeniach wielokrotnej precyzji wszystkie wartości były odpowiedniego typu.
0.1-mpf('0.1')
mpf('-1.49011614e-9')
s = mpf('0.5')
a = mpf('3.7')
Poniższa pętla wylicza wartośc według wzoru: $s_{n+1} = (s_n * 0.5) * (1 - s_n)$ i drukuje co dziesiątą wartość.
for i in range(1, 201):
s = (s * a) * (mpf('1') - s)
if i % 10 == 0:
print(''.join([str(temp_value) for temp_value in [i, ': ', nstr(s, cyfry)]]))
10: 0.7133773565 20: 0.264937669 30: 0.7071320415 40: 0.759770155 50: 0.8964278698 60: 0.5421027541 70: 0.2871110439 80: 0.2855977714 90: 0.2634914219 100: 0.7914719582 110: 0.863964498 120: 0.8007474542 130: 0.6594788432 140: 0.8937106133 150: 0.5421888828 160: 0.2846142352 170: 0.3180740178 180: 0.7556521893 190: 0.7059772611 200: 0.8025476336