[python-nl] grote getallen met grote precisie
Remco Gerlich
remco at gerlich.nl
Tue May 5 07:44:47 CEST 2009
Hoi,
Ik heb er gisteren ook mee gespeeld, en de truc is:
decimal.getcontext().prec = 1000
Je kunt de precisie zelf instellen! Standaard is het 28 cijfers.
from decimal import *
getcontext().prec = 1000
a = Decimal('1e22')
c = Decimal('1e22')+Decimal('1')
b = (c*c-a*a).sqrt()
Geeft het juiste antwoord (b is afgerond 141421356237, groter dan ik had
verwacht :-))
Remco
2009/5/4 Robert-Reinder Nederhoed <r.r.nederhoed op gmail.com>
> No luck so far...
>
> >>> from decimal import Decimal
> >>> a = Decimal(10) ** Decimal(80)
> >>> b = a + Decimal(1)
> >>> b
> Decimal('1.000000000000000000000000000E+80')
> >>> 10 ** 80
>
> 100000000000000000000000000000000000000000000000000000000000000000000000000000000
>
> bij Decimal gaat het 1 eentje al verloren voordat we de wortel trekken.
>
> >>> from fractions import Fraction
> >>> a = Fraction(10**100)
> >>> b = 1 + a
> >>> b
>
> Fraction(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,
> 1)
> >>> (b ** Fraction(2)) ** Fraction(1, 2)
> 1e+100
>
> De implementatie van power en sqrt gebruiken intern floating points zo te
> zien.
>
> > Leuk. Kun je vertellen waar je integers vandaan komen [..]
> Ik werk een eigen compressie idee uit. Tot nu toe wordt mijn bestand
> alleen maar groter :-)
> Nou dat is niet helemaal waar, maar ik probeer met grotere brokken
> data te werken en nu loop ik tegen grenzen aan.
>
>
> Ik heb al even gespeeld met een implementatie van sqrt die enkel
> integers oplevert, maar die begint bij getallen groter dan 10**7 tijd
> te vragen...
>
> def sqrt(x):
> """ via http://www.pedrofreire.com/sqrt
> >>> sqrt(4)
> 2
> >>> sqrt(144)
> 12
> >>> sqrt((10**6 + 1) ** 2)
> 1000001
> """
> x = (x+1) >> 1
> r = 0
> while x > r:
> x -= r
> r += 1
> return r
>
>
> hum... ik ga er nog even over nadenken. Misschien dat ik eerst met
> blokken ga werken van 30 cijfers in float128. Of mijn idee anders
> opzetten.
>
> Lastig. Bedankt voor nu, goede nacht!
> _______________________________________________
> Python-nl mailing list
> Python-nl op python.org
> http://mail.python.org/mailman/listinfo/python-nl
>
------------- volgend deel ------------
Een HTML-bijlage is gescrubt...
URL: <http://mail.python.org/pipermail/python-nl/attachments/20090505/647bedfe/attachment-0001.htm>
More information about the Python-nl
mailing list