[python-nl] grote getallen met grote precisie

Robert-Reinder Nederhoed r.r.nederhoed at gmail.com
Mon May 4 13:34:20 CEST 2009


Goedemiddag! Ik wil de korte zijde van een hele lange, smalle
rechthoekige driehoek berekenen, daarbij gebruik ik Pythagoras met
grote getallen:

c = (a**2 + b**2) ** 0.5

Waarbij:
c == 1 + 10**22 (schuine zijde)
a == 10**22 (rechte zijde)

Het antwoord zou moeten volgen uit:
b = (c**2 - b**2) ** 0.5

En nu:
>>> c = 1 + 10**22
>>> a = 10**22
>>> b = (c**2 - a**2) ** 0.5
>>> b
141421356237.30951

Prima!
En nu de controle: terugrekenen volgens Pythagoras
>>> controle = (a**2 + b**2) ** 0.5
>>> controle == c
False
>>> controle
1e+22
>>> c
10000000000000000000001L

De 1 gaat verloren. Ik begrijp dat dit komt door het gebrek aan
precisie bij float waarden. Hoe kan ik dit omschrijven zodat ik de 1
niet verlies?
Is er een float-alternatief die een zekere precisie behoudt?


Bedankt alvast! Groeten uit een half-zonnig Den Haag, Robert-Reinder

--


More information about the Python-nl mailing list