Zahlengenauigkeit mit Decimal

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

Hallo liebe ExpertInnen,

aktuell experimentiere ich mal wieder mit der Zahlengenauigkeit bzw. den Nachkommastellen, die Python ausgeben kann.

Folgendes Script berechnet die geometrische Reihe 1/x^2:

Code: Alles auswählen

from decimal import *
getcontext().prec = 200

def folge(n):
    i=0 #Startwert
    e=0 #Ergebnis
    
    while i <n:
        s = 1/2**i
        
        e = e + s
        i = i+1 
        
    return (e)

a = int(input("Gib eine Zahl an: "))

for a in range(1, a):
   print(a, ":", Decimal(folge(a)))
Soweit so gut. Könnte sicherlich anders, könnte sicherlich besser gehen. Ich bin ja grad am lernen.

Allerdings verstehe ich nicht, wie ich Python dazu bringen kann, weitere Stellen anzuzeigen.

Wenn ich 55 Schritte angebe, dann wird schon der Grenzwert gezeigt, obwohl ich ja eigentlich z.B. 200 Stellen sehen möchte.

Was mache ich falsch?

Hiermit z.B.:

Code: Alles auswählen

import math
from decimal import *
getcontext().prec = 1000
print(Decimal(2).sqrt())
werden ja problemlos 1000 Stellen der Wurzel aus 2 angezeigt.

Ich verfolge keinen praktischen Zweck, ich möchte nur lernen, wie Python mit Zahlen umgeht und wie ich dann damit umgehe... :wink:
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

Benutze keine *-Importe, weil damit verschleiert wird, woher welcher Name kommt.

In `folge` benutzt Du gar kein Decimal. Damit kannst Du auch nicht mit 200 Stellen rechnen.
Statt der while-Schleife benutze eine for-Schleife.
Statt selbst die Summe zu bilden, benutze sum.
Es ist verwirrend, dass `a` sowohl die Maximalzahl als auch die Laufvariable ist.

Code: Alles auswählen

from decimal import getcontext, Decimal
getcontext().prec = 200

def folge(n):
    half = Decimal('0.5')
    return sum(half ** i for i in range(n))

amount = int(input("Gib eine Zahl an: "))
for i in range(1, amount):
   print(f"{i}: {folge(i)}")
Intregral
User
Beiträge: 20
Registriert: Montag 15. März 2021, 13:35

Super, danke! Dass mit der Schleife hat mir auch nicht gefallen.
Antworten