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.nederh...@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@python.org > http://mail.python.org/mailman/listinfo/python-nl >
_______________________________________________ Python-nl mailing list Python-nl@python.org http://mail.python.org/mailman/listinfo/python-nl