[python-nl] grote getallen met grote precisie

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


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!


More information about the Python-nl mailing list