23 Stimmen

Welche Programmiersprachen unterstützen Arithmetik mit beliebiger Genauigkeit?

Welche Programmiersprachen unterstützen Arithmetik mit beliebiger Genauigkeit und können Sie ein kurzes Beispiel dafür geben, wie man eine beliebige Anzahl von Ziffern ausgibt?

14voto

Logan Punkte 1824

In einigen Sprachen ist diese Unterstützung bereits eingebaut. Werfen Sie zum Beispiel einen Blick auf java.math.BigDecimal in Java, oder dezimal.dezimal in Python.

Andere Sprachen verfügen häufig über eine Bibliothek, die diese Funktion bereitstellt. In C könnten Sie zum Beispiel Folgendes verwenden GMP oder andere Optionen.

Der Abschnitt "Software mit beliebiger Genauigkeit" in dieser Artikel gibt einen guten Überblick über Ihre Möglichkeiten.

8 Stimmen

Javas Unterstützung für Arithmetik mit beliebiger Genauigkeit ist ziemlich dürftig, gerade weil sie no Teil der Sprache. OK, BigDecimal ist Teil der Standardbibliothek, aber es ist nicht Teil der Sprache. Sie können keine normalen arithmetischen Operatoren mit BigDecimals verwenden.

1 Stimmen

Genau das, was @DanDyer gesagt hat. Die Frage fragt speziell nach Sprachen die Arithmetik mit beliebiger Genauigkeit unterstützen, was in Java nicht der Fall ist. BigDecimal ist jemand, der die Sprache zur Implementierung von ihre eigenen Klasse/Bibliothek für Arithmetik mit beliebiger Genauigkeit. Aber ich würde vermuten, dass fast jede nicht-triviale Sprache eine solche Bibliothek zur Verfügung hat. Das ist nicht das, wonach die Frage fragt.

13voto

dreeves Punkte 25750

Mathematica.

N[Pi, 100]

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068

Mathematica hat nicht nur eine beliebige Genauigkeit, sondern standardmäßig auch eine unendliche Genauigkeit. Es behält Dinge wie 1/3 als rationale Zahlen und sogar Ausdrücke, die Dinge wie Sqrt[2] beinhalten, behält es symbolisch bei, bis Sie nach einer numerischen Annäherung fragen, die Sie mit einer beliebigen Anzahl von Dezimalstellen haben können.

6voto

torial Punkte 13003

Python hat diese Fähigkeit. Es gibt ein hervorragendes Beispiel aquí .

Aus dem Artikel:

from math import log as _flog
from decimal import getcontext, Decimal

def log(x):
    if x < 0:
        return Decimal("NaN")
    if x == 0:
        return Decimal("-inf")
    getcontext().prec += 3
    eps = Decimal("10")**(-getcontext().prec+2)
    # A good initial estimate is needed
    r = Decimal(repr(_flog(float(x))))
    while 1:
        r2 = r - 1 + x/exp(r)
        if abs(r2-r) < eps:
            break
        else:
            r = r2
    getcontext().prec -= 3
    return +r

Auch im Python-Schnellstart-Tutorial wird die beliebige Genauigkeit besprochen: http://docs.python.org/lib/decimal-tutorial.html

und beschreibt getcontext:

die Funktion getcontext() greift auf die aktuellen Kontext zu und ermöglicht die Einstellungen geändert werden.

Editar: Klarstellung zu getcontext hinzugefügt.

0 Stimmen

Der Link ist tot und der Code, den Sie gepostet haben, funktioniert nicht. Was ist getcontext()?

0 Stimmen

Klärung in meiner Antwort hinzugefügt.

6voto

Nicolas Cellier Punkte 61

Smalltalk unterstützt von Anfang an Integers und Fractions mit beliebiger Genauigkeit. Beachten Sie, dass die gnu Smalltalk Implementierung GMP unter der Haube verwendet. Ich entwickle auch ArbitraryPrecisionFloat für verschiedene Dialekte (Squeak/Pharo Visualworks und Dolphin), siehe http://www.squeaksource.com/ArbitraryPrecisionFl.html

6voto

sanxiyn Punkte 3610

In Common Lisp,

(format t "~D~%" (expt 7 77))

"~D~%" im printf-Format wäre "%d \n ". Arithmetik mit beliebiger Genauigkeit ist in Common Lisp eingebaut.

0 Stimmen

Gibt es eine Möglichkeit, n Ziffern nach der Dezimalstelle von, sagen wir, 1/3 zu drucken?

0 Stimmen

Wenn Sie den Wert von (/ 1 3) ausdrucken würden, wäre es "1/3" oder etwas Ähnliches. Bis zu den Grenzen des verfügbaren Speichers können Sie mit genauen ganzen Zahlen und rationalen Zahlen arbeiten. Dezimalpunkte gehören zu den Fließkommazahlen, und typischerweise verwenden Lisp-Systeme Standard-Fließkommazahlen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X