Hoi,<br><br>Ik heb er gisteren ook mee gespeeld, en de truc is:<br><br>decimal.getcontext().prec = 1000<br><br>Je kunt de precisie zelf instellen! Standaard is het 28 cijfers.<br><br>from decimal import *<br>getcontext().prec = 1000<br>
a = Decimal('1e22')<br>c = Decimal('1e22')+Decimal('1')<br><br>b = (c*c-a*a).sqrt()<br><br>Geeft het juiste antwoord (b is afgerond 141421356237, groter dan ik had verwacht :-))<br><br>Remco<br><br>
<div class="gmail_quote">2009/5/4 Robert-Reinder Nederhoed <span dir="ltr"><<a href="mailto:r.r.nederhoed@gmail.com">r.r.nederhoed@gmail.com</a>></span><br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
No luck so far...<br>
<br>
>>> from decimal import Decimal<br>
>>> a = Decimal(10) ** Decimal(80)<br>
>>> b = a + Decimal(1)<br>
>>> b<br>
Decimal('1.000000000000000000000000000E+80')<br>
>>> 10 ** 80<br>
100000000000000000000000000000000000000000000000000000000000000000000000000000000<br>
<br>
bij Decimal gaat het 1 eentje al verloren voordat we de wortel trekken.<br>
<br>
>>> from fractions import Fraction<br>
>>> a = Fraction(10**100)<br>
>>> b = 1 + a<br>
>>> b<br>
Fraction(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,<br>
1)<br>
>>> (b ** Fraction(2)) ** Fraction(1, 2)<br>
1e+100<br>
<br>
De implementatie van power en sqrt gebruiken intern floating points zo te zien.<br>
<br>
> Leuk. Kun je vertellen waar je integers vandaan komen [..]<br>
Ik werk een eigen compressie idee uit. Tot nu toe wordt mijn bestand<br>
alleen maar groter :-)<br>
Nou dat is niet helemaal waar, maar ik probeer met grotere brokken<br>
data te werken en nu loop ik tegen grenzen aan.<br>
<br>
<br>
Ik heb al even gespeeld met een implementatie van sqrt die enkel<br>
integers oplevert, maar die begint bij getallen groter dan 10**7 tijd<br>
te vragen...<br>
<br>
def sqrt(x):<br>
""" via <a href="http://www.pedrofreire.com/sqrt" target="_blank">http://www.pedrofreire.com/sqrt</a><br>
>>> sqrt(4)<br>
2<br>
>>> sqrt(144)<br>
12<br>
>>> sqrt((10**6 + 1) ** 2)<br>
1000001<br>
"""<br>
x = (x+1) >> 1<br>
r = 0<br>
while x > r:<br>
x -= r<br>
r += 1<br>
return r<br>
<br>
<br>
hum... ik ga er nog even over nadenken. Misschien dat ik eerst met<br>
blokken ga werken van 30 cijfers in float128. Of mijn idee anders<br>
opzetten.<br>
<br>
Lastig. Bedankt voor nu, goede nacht!<br>
<div><div></div><div class="h5">_______________________________________________<br>
Python-nl mailing list<br>
<a href="mailto:Python-nl@python.org">Python-nl@python.org</a><br>
<a href="http://mail.python.org/mailman/listinfo/python-nl" target="_blank">http://mail.python.org/mailman/listinfo/python-nl</a><br>
</div></div></blockquote></div><br>