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(&#39;1e22&#39;)<br>c = Decimal(&#39;1e22&#39;)+Decimal(&#39;1&#39;)<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">&lt;<a href="mailto:r.r.nederhoed@gmail.com">r.r.nederhoed@gmail.com</a>&gt;</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>
&gt;&gt;&gt; from decimal import Decimal<br>
&gt;&gt;&gt; a = Decimal(10) ** Decimal(80)<br>
&gt;&gt;&gt; b = a + Decimal(1)<br>
&gt;&gt;&gt; b<br>
Decimal(&#39;1.000000000000000000000000000E+80&#39;)<br>
&gt;&gt;&gt; 10 ** 80<br>
100000000000000000000000000000000000000000000000000000000000000000000000000000000<br>
<br>
bij Decimal gaat het 1 eentje al verloren voordat we de wortel trekken.<br>
<br>
&gt;&gt;&gt; from fractions import Fraction<br>
&gt;&gt;&gt; a = Fraction(10**100)<br>
&gt;&gt;&gt; b = 1 + a<br>
&gt;&gt;&gt; b<br>
Fraction(10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,<br>
1)<br>
&gt;&gt;&gt; (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>
&gt; 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>
    &quot;&quot;&quot; via <a href="http://www.pedrofreire.com/sqrt" target="_blank">http://www.pedrofreire.com/sqrt</a><br>
    &gt;&gt;&gt; sqrt(4)<br>
    2<br>
    &gt;&gt;&gt; sqrt(144)<br>
    12<br>
    &gt;&gt;&gt; sqrt((10**6 + 1) ** 2)<br>
    1000001<br>
    &quot;&quot;&quot;<br>
    x = (x+1) &gt;&gt; 1<br>
    r = 0<br>
    while x &gt; 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>