Stellen Sie eine reelle Zahl ohne Genauigkeitsverlust dar

10

Der aktuelle Gleitkomma (ANSI C float, double) ermöglicht die Darstellung einer Approximation einer reellen Zahl.
Gibt es eine Möglichkeit, reelle Zahlen fehlerfrei darzustellen ?
Hier ist eine Idee, die alles andere als perfekt ist.

Zum Beispiel ist 1/3 0,33333333 ... (Basis 10) oder o.01010101 ... (Basis 2), aber auch 0,1 (Basis 3).
Ist es eine gute Idee, diese "Struktur" zu implementieren:

base, mantissa, exponent

1/3 könnte also 3 ^ -1 sein

{[11] = base 3, [1.0] mantissa, [-1] exponent}

Irgendwelche anderen Ideen?

incud
quelle
12
Sie können nur auf diese Weise rationale Zahlen darstellen.
Andrej Bauer
Wie schlagen Sie vor, arithmetische Operationen für Zahlen in dieser Darstellung zu implementieren? Verwenden Sie Logarithmen, um die Basis zu ändern? Dies wäre viel teurer als IEEE-Gleitkomma-Mathematik.
David Zhang
Nun, ich habe keine Ahnung. Ich bin kein Ingenieur :) Natürlich kann ich es nicht in Hardware implementieren. Eine langsame, ineffiziente Implementierung kann in C durchgeführt werden. Dies wäre nur ein Experiment
einschließlich

Antworten:

20

Es hängt alles davon ab, was Sie tun möchten.

Was Sie beispielsweise zeigen, ist eine großartige Möglichkeit, rationale Zahlen darzustellen. Aber es kann immer noch nicht so etwas wie oder perfekt darstellen.eπe

Tatsächlich haben viele Sprachen wie Haskell und Scheme die Unterstützung rationaler Zahlen eingebaut und diese in der Form gespeichert, wobei ganze Zahlen sind. a,baba,b

Der Hauptgrund dafür, dass diese nicht weit verbreitet sind, ist die Leistung. Gleitkommazahlen sind etwas ungenau, aber ihre Operationen sind in Hardware implementiert. Ihr vorgeschlagenes System ermöglicht eine höhere Präzision, erfordert jedoch mehrere Implementierungsschritte im Gegensatz zu einer einzelnen Operation, die in Hardware ausgeführt werden kann.

Es ist bekannt , dass einige reelle Zahlen unberechenbare, wie die sind Halte Zahlen . Im Gegensatz zu gibt es keinen Algorithmus, der seine Ziffern , bei dem wir die te Ziffer berechnen können, solange wir lange genug warten.nπn

Wenn Sie echte Präzision für irrationale oder transzendentale Zahlen wünschen, müssen Sie wahrscheinlich ein System symbolischer Algebra verwenden und dann eine endgültige Antwort in symbolischer Form erhalten, die Sie einer beliebigen Anzahl von Ziffern annähern können. Aufgrund der oben beschriebenen Unentscheidbarkeitsprobleme ist dieser Ansatz jedoch notwendigerweise begrenzt. Es ist immer noch gut für Dinge wie die Annäherung von Integralen oder unendlichen Reihen.

jmite
quelle
Darf ich noch eine Frage stellen? Wenn Sie in den 80er Jahren ein Intel-Ingenieur gewesen wären, wie hätten Sie Ihr echtes Zahlenformat "entworfen"?
einschließlich
3
Ich bin nicht sehr qualifiziert zu antworten, da ich kein Ingenieur bin, bin ich ein Theorieforscher. Ich sehe nicht viel falsch mit IEEE Float und Doppelmoral und jetzt Quad. Ich glaube nicht, dass es viele Anwendungen gegeben hat, die von einer Arithmetik mit höherer Genauigkeit abhängen, und diejenigen, die dies tun, können eine softwareunterstützte Version verwenden.
jmite
Symbolische Algebra ist nicht der richtige Formalismus für exakte reelle Arithmetik. Sie benötigen eine Darstellung, die beliebig große Mantissen zulässt.
Andrej Bauer
8
@AndrejBauer: Eine beliebig große Mantisse wird dich nicht retten, wenn du eine genaue Darstellung von willst . 2
user2357112 unterstützt Monica
@jmite du bist zu bescheiden :)
einschließlich
22

Es gibt keine Möglichkeit, alle reellen Zahlen fehlerfrei darzustellen, wenn jede Zahl eine endliche Darstellung haben soll. Es gibt unzählige reelle Zahlen, aber nur unzählige endliche Zeichenfolgen von Einsen und Nullen, mit denen Sie sie darstellen können.

David Richerby
quelle
Man könnte die Anforderung von der Darstellung jeder reellen Zahl auf die Beschränkung nur dieser reellen Zahlen beschränken, die die Ausgabe einer Turingmaschine sein könnten. Das wäre nur eine zählbare Anzahl von reellen Zahlen, würde aber immer noch jede Zahl abdecken, die Sie jemals darstellen möchten. Aber ich glaube nicht, dass Sie mit solchen Zahlen effizient rechnen können.
Kasperd
3
@kasperd Sie heißen berechenbare Real . Leider sind Dinge wie Gleichheit nicht über die berechenbaren Realitäten berechenbar.
David Richerby
Es ist in der Tat ziemlich klar, dass die Berechnung der Gleichheit für solche Zahlen gleichbedeutend mit der Lösung des Halteproblems ist. Bei einem TM kann man eine reelle Zahl definieren, die mit vielen Dezimalstellen beginnt, die Null sind, genau so viele wie die Laufzeit des TM, gefolgt von einer Eins. Der Vergleich dieser Zahl mit Null entspricht der Lösung des Halteproblems für das ursprüngliche TM.
Kasperd
Diese Antwort ist falsch. Alan Turing spricht in seinem ersten Artikel über Maschinen, in dem er Turing-Maschinen erfindet, davon, Real als unendliche Datenfolgen darzustellen . Dies führt zur Idee der sogenannten "Typ II Turing-Maschine", und es gibt eine sehr erfolgreiche Theorie der reellen Zahlenberechnung, die auf dieser Idee basiert. Es ist auch in der Praxis implementiert, siehe meine Antwort.
Andrej Bauer
1
Vielleicht technisch, aber es geht am Punkt vorbei, nämlich dass es durchaus vernünftige unendliche Darstellungen von reellen Zahlen gibt. Und das ist nichts Seltsames: Eine TCP / IP-Verbindung, ein Skype-Anruf oder ein Video-Feed von einer Kamera sind Beispiele für (möglicherweise) unendliche Datenmengen. Es gibt keine a priori Beschränkung, wie viele Informationen sie bereitstellen können. Es gibt nur eine Einschränkung, wie viele Informationen Sie in einer begrenzten Zeitspanne daraus erhalten können.
Andrej Bauer
7

bmebme2

Es gibt einen ganzen Zweig der berechenbaren Mathematik, der sich mit exakter reeller Arithmetik befasst. Es wurden viele Datenstrukturen zur Darstellung exakter reeller Zahlen vorgeschlagen: Ziffernströme, Ströme affiner Kontraktionen, Cauchy-Sequenzen von Rationalen, Cauchy-Sequenzen von dyadischen Rationalen, Dedekind-Schnitte, Sequenzen von Shkrinking-Intervallen usw. Es gibt Implementierungen von exakten reellen Arithmetik-basierten zu diesen Ideen zum Beispiel:

Von diesen ist iRRAM das ausgereifteste und effizienteste. Marshall in einem experimentellen Projekt, während das dritte ein Studentenprojekt ist, aber auch das am leichtesten zugängliche. Es enthält eine sehr schöne Einführung, in der die Probleme bei der Berechnung der reellen Zahlen erläutert werden. Ich empfehle Ihnen dringend, sich diese anzuschauen.

Lassen Sie mich eine Bemerkung machen. Jemand wird einwenden, dass ein unendliches Objekt nicht von einem Computer dargestellt werden kann. In gewissem Sinne ist dies wahr, in einem anderen nicht. Wir müssen niemals eine ganze reelle Zahl darstellen, wir brauchen nur eine endliche Annäherungin jeder Phase der Berechnung. Wir brauchen also nur eine Darstellung, die ein Real bis zu einer bestimmten Genauigkeit darstellen kann. Sobald uns der Computerspeicher ausgeht, geht uns natürlich der Computerspeicher aus - aber das ist eine Einschränkung des Computers, nicht der Darstellung selbst. Diese Situation unterscheidet sich nicht von vielen anderen in der Programmierung. Beispielsweise verwenden Benutzer in Python Ganzzahlen und betrachten sie als "beliebig groß", obwohl sie natürlich die Größe des verfügbaren Speichers nicht überschreiten können. Manchmal ist Unendlichkeit eine nützliche Annäherung für eine sehr große endliche Zahl.

Außerdem höre ich oft die Behauptung, dass Computer nur mit berechenbaren reellen Zahlen umgehen können. Dabei fehlen zwei wichtige Punkte. Erstens haben Computer Zugriff auf Daten aus der Außenwelt, sodass wir auch (die nicht überprüfbare) Annahme treffen müssen, dass auch die Außenwelt berechenbar ist. Zweitens müssen wir unterscheiden, welche Realitäten ein Computer berechnen kann und welche Realitäten er darstellen kann. Wenn wir zum Beispiel Ziffernströme als Repräsentation von Real wählen, ist es durchaus möglich, ein nicht berechenbares Real darzustellen : Wenn uns jemand es geben würde, würden wir wissen, wie man es darstellt. Wenn wir uns jedoch dafür entscheiden, Real als Teile des Quellcodes darzustellen, die Ziffern berechnen, können wir offensichtlich keine nicht berechenbaren Real darstellen.

In jedem Fall wird dieses Thema am besten mit einer weiteren Lektüre behandelt.

Andrej Bauer
quelle
+1, aber ich würde einwenden, dass Sie eine unendliche Zeichenfolge nicht durch eine endliche Näherung darstellen können, ohne die Genauigkeit zu verlieren , wie es die Frage erfordert. Sicher, Sie können so viel Präzision erzielen, wie Sie möchten - wie Sie es könnten, indem Sie sich einem Rationalen annähern -, aber das ist nicht ganz das, wonach die Frage fragt. Das ist wohl eher ein Problem mit der Frage als mit der Antwort.
David Richerby
2
Der Punkt ist, dass wir nicht mit endlichen Zeichenfolgen darstellen. Wir repräsentieren mit unendlichen Zeichenfolgen, aber wir brauchen in jeder Berechnungsstufe immer nur einen endlichen Teil einer solchen unendlichen Zeichenfolge. Oder anders ausgedrückt: Es gibt keinen Präzisionsverlust, da die Datenstruktur die gesamten Informationen enthält, aber Sie können natürlich nicht auf alle Informationen gleichzeitig zugreifen oder sie verarbeiten: Die Datenstruktur bietet Ihnen so viel Präzision, wie Sie verlangen . Der Engpass liegt nicht auf der Seite der Datenstruktur, sondern auf der Seite des "Verbrauchers", der die Informationen daraus gewinnen möchte.
Andrej Bauer
@AndrejBauer In einigen Fällen müssen Sie jedoch auf alle Informationen gleichzeitig zugreifen oder diese verarbeiten, z. B. durch symbolische Berechnung, indem Sie die "Essenz" oder die Natur einer Menge erfassen und nicht wie jeden anderen Ziffernstrom. Wenn Sie einem symbolischen Berechnungspaket mitteilen, dass überprüft werden soll22=2k2 k222k1.99...
2
@Thomas: Die symbolische Berechnung stellt keine reellen Zahlen dar, sondern normalerweise ein Teilfeld der reellen Zahlen, typischerweise dasjenige, das durch Elementarfunktionen und Wurzeln von Polynomen erzeugt wird. Diese Unterfelder sind weder vollständig (geschlossen unter den Grenzen von Cauchy-Sequenzen) noch rechnerisch vollständig (geschlossen unter berechenbaren Grenzen von Cauchy-Sequenzen). Eine Darstellung ist keine Darstellung von Real, es sei denn, Sie können alle (berechenbaren) Real darstellen: Symbolische Berechnungen schlagen diese Bedingung fehl.
Andrej Bauer
1
Diese Bemerkungen zur Zählbarkeit sind irrelevant, da die berechenbaren Realwerte nicht berechenbar sind.
Andrej Bauer
7

Es gibt viele effektive Rational Number- Implementierungen, aber eine, die schon oft vorgeschlagen wurde und sogar mit einigen Irrationalen recht gut umgehen kann, ist Continued Fractions .

Zitat aus Continued Fractions von Darren C. Collins :

Satz 5-1. - Der fortgesetzte Bruchausdruck einer reellen Zahl ist genau dann endlich, wenn die reelle Zahl rational ist.

Zitat aus Mathworld - Periodic Continued Fractions

... ein fortgesetzter Bruch ist periodisch, wenn er eine Wurzel eines quadratischen Polynoms ist.

dh alle Wurzeln können als periodisch fortgesetzte Fraktionen ausgedrückt werden.

Es gibt auch einen exakten fortgesetzten Bruch für π, der mich überraschte, bis @AndrejBauer darauf hinwies, dass dies tatsächlich nicht der Fall ist.

OldCurmudgeon
quelle
ππ
Die fortgesetzte Darstellung von Realzahlen in Brüchen wurde vor einiger Zeit von J. Vuillemin als Implementierung für die exakte Realarithmetik vorgeschlagen. Es stellt sich als nicht sehr effizient heraus, da die Zahlen ziemlich bald ziemlich groß werden und es schwierig ist, ihre Größe zu reduzieren.
Andrej Bauer
Fortgesetzte Brüche haben selbst bei der Darstellung rationaler Zahlen einige Rechenprobleme - während sie mit einer Variante der lexikografischen Reihenfolge relativ schnell verglichen werden können und die Manipulation eines einzelnen fortgesetzten Bruchs einfach ist, sind sowohl (binäre) Addition als auch Multiplikation auf CFs ziemlich komplizierte Operationen implementieren.
Steven Stadnicki
5

In den Kommentaren gibt es eine Reihe von "exakten realen" Vorschlägen (z. B. fortgesetzte Brüche, lineare fraktionelle Transformationen usw.). Der typische Haken ist, dass Sie zwar Antworten auf eine Formel berechnen können, die Gleichheit jedoch häufig nicht entschieden werden kann.

Wenn Sie sich jedoch nur für algebraische Zahlen interessieren, haben Sie Glück: Die Theorie der realen geschlossenen Felder ist vollständig, o-minimal und entscheidbar. Dies wurde 1948 von Tarski bewiesen.

Aber da ist ein Fang. Sie möchten den Tarski-Algorithmus nicht verwenden, da er in der Komplexitätsklasse NONELEMENTARY enthalten ist, die so unpraktisch ist, wie es unpraktische Algorithmen nur können. Es gibt neuere Methoden, die die Komplexität auf DEXP reduzieren. Dies ist die beste, die wir derzeit kennen.

Beachten Sie, dass das Problem NP-schwer ist, da es SAT enthält. Es ist jedoch nicht bekannt (oder angenommen), dass es sich um einen NP handelt.

EDIT Ich werde versuchen, dies ein wenig mehr zu erklären.

Der Rahmen für das Verständnis all dessen ist ein Entscheidungsproblem, das als Satisfiability Modulo Theories, kurz SMT, bekannt ist. Grundsätzlich wollen wir SAT für eine Theorie lösen, die auf der klassischen Logik aufbaut.

Wir beginnen also mit der klassischen Logik erster Ordnung mit einem Gleichheitstest. Welche Funktionssymbole wir einschließen möchten und welche Axiome sie haben, bestimmt, ob die Theorie entscheidbar ist oder nicht.

Es gibt viele interessante Theorien, die im SMT-Framework zum Ausdruck kommen. Zum Beispiel gibt es Theorien über Datenstrukturen (z. B. Listen, Binärbäume usw.), mit denen die Richtigkeit von Programmen nachgewiesen werden kann, und die Theorie der euklidischen Geometrie. Für unseren Zweck betrachten wir jedoch Theorien verschiedener Arten von Zahlen.

Presburger Arithmetik ist die Theorie der natürlichen Zahlen mit Addition. Diese Theorie ist entscheidbar.

Peano-Arithmetik ist die Theorie der natürlichen Zahlen mit Addition und Multiplikation. Diese Theorie ist nicht entscheidbar, wie Gödel bekanntlich bewiesen hat.

Die Tarski-Arithmetik ist die Theorie der reellen Zahlen mit allen Feldoperationen (Addition, Subtraktion, Multiplikation und Division). Interessanterweise ist diese Theorie entscheidbar. Dies war zu dieser Zeit ein äußerst kontraintuitives Ergebnis. Sie könnten annehmen, dass es "schwieriger" ist, weil es eine "Obermenge" der natürlichen Zahlen ist, aber dies ist nicht der Fall; Vergleichen Sie beispielsweise die lineare Programmierung über die Rationalen mit der linearen Programmierung über die ganzen Zahlen.

Es mag nicht offensichtlich erscheinen, dass Zufriedenheit alles ist, was Sie brauchen, aber es ist. Wenn Sie beispielsweise testen möchten, ob die positive Quadratwurzel von 2 gleich der realen Kubikwurzel von 3 ist, können Sie dies als Erfüllbarkeitsproblem ausdrücken:

x.x>0x22=0x33=0

ex

sin{xπ|sinx=0}sin

exeix


Alfred Tarski (1948), Eine Entscheidungsmethode für elementare Algebra und Geometrie .

Pseudonym
quelle
2

Es ist möglich, eine sehr große Klasse von Zahlen, die als algebraische Zahlen bezeichnet werden, genau darzustellen , indem sie als Wurzeln von Polynomen behandelt werden.

πe

Weitere Achsen
quelle
eeixsincos{xR|sinx=0}
@Pseudonym Das scheint wirklich interessant zu sein, aber ich glaube nicht, dass ich den mathematischen Hintergrund habe, um es richtig zu verstehen ... Was meinst du mit "nah genug an den ganzen Zahlen"?
Weitere Äxte
Ich werde meine Antwort ändern, um sie zu erklären.
Pseudonym
1

π2

Pflanze
quelle
Diese Antwort ist falsch. Es gibt einen ganzen Bereich exakter reeller Arithmetik, in dem erklärt wird, wie Reelle durch Computer dargestellt werden. Die Annahme, dass ein Real durch eine endliche Zeichenkette dargestellt werden muss, ist falsch. Wir können auch unendliche Zeichenfolgen verwenden. Alan Turing hat darüber bereits in seiner ersten Arbeit geschrieben, in der er Turing-Maschinen erfunden hat!
Andrej Bauer
Können Sie einen Link zu einem Artikel über das Speichern und Bearbeiten von unendlichen Zeichenfolgen in einem tatsächlichen Computer erstellen, da dies die Antwort auf die gestellten Fragen wäre? Es war auch nicht seine erste Arbeit, die erste Veröffentlichung war 1936, diese Arbeit war 1937.
Plant
Sie haben Recht, es ist die Zeitung von 1937. Um zu sehen, wie unendliche Zeichenfolgen manipuliert werden, können Sie sich beispielsweise das TCP / IP-Protokoll ansehen. Ich habe nie gesagt, dass das ganze Real im Computer gespeichert werden muss.
Andrej Bauer
-1

Sie können nicht alle reellen Zahlen in einem Computer darstellen, aber Sie können viele darstellen. Sie könnten Brüche verwenden, die mehr Zahlen als Gleitkommazahlen darstellen. Sie können auch komplexere Dinge tun, z. B. die Darstellung von Zahlen als Wurzel eines Polynoms mit einer Annäherung, die unter der Newton-Methode gegen die Zahl konvergiert.

Alice Ryhl
quelle
Dies ist wiederum eine falsche Antwort, die aus Unwissenheit hervorgeht. Es gibt einen ganzen Bereich exakter reeller Arithmetik, in dem untersucht wird, wie alle reellen Werte durch geeignete Datenstrukturen dargestellt werden können.
Andrej Bauer
@AndrejBauer Sie schlagen also vor, dass es eine Datenstruktur gibt, die eine beliebige reelle Zahl darstellen kann? Jede solche Datenstruktur müsste eine unzählige Anzahl von Bits verwenden, um eine beliebige Zahl darzustellen.
Alice Ryhl
1
Zuallererst reicht eine zählbare Anzahl von Bits aus, und da Sie nicht alle auf einmal benötigen und auch nicht alle auf einmal verarbeiten können, können sie sowohl zeitlich als auch räumlich gespeichert werden.
Andrej Bauer
@AndrejBauer Diese Antwort ist richtig und sagt dasselbe wie Ihre, wenn auch mit viel weniger Informationen. Sie können nicht alle reellen Zahlen in einem Computer darstellen. Sie können eine beliebige reelle Zahl darstellen, jedoch nicht alle gleichzeitig. Wenn überhaupt, würde ich bestreiten, dass Sie "viele" darstellen können, da Sie in einem bestimmten Computer nur endlich viele darstellen können und in einem abstrakten Computer, der den üblichen Rechenmodellen (Turing) entspricht, nur fast keine (im mathematischen Sinne) Maschinenäquivalent).
Gilles 'SO - hör auf böse zu sein'
-1

Es ist möglich, eine beliebige Zahl genau dort darzustellen, wo die Eingaben darstellbar sind, indem sie als eine Folge von Operationen gespeichert werden. So speichern Sie 1/3beispielsweise 1 divided by 3, indem Sie durch Abbrechen von Operationen die nächste Operation vereinfachen, um eine genaue Antwort zu geben (1/3) * 3. Dies kann auch Situationen behandeln, in denen Sie Irrationalitäten kennen, z. B. πindem Sie diese in Ihren Berechnungen beibehalten.

Es erfordert jedoch eine zunehmende Menge an Speicher für jede Zahl und - vorausgesetzt, Ihr Vereinfacher ist nicht perfekt - wird es wahrscheinlich eine immer größere Menge an Werten erfordern, an denen Sie viel arbeiten.

Jack Aidley
quelle
5+262=3
Tatsächlich. In der Tat ist es wahrscheinlich praktisch unmöglich, vollständig erfolgreich zu automatisieren. Das Ergebnis bleibt jedoch auch dann präzise, ​​wenn Sie nicht die einfachste Darstellung verwendet haben.
Jack Aidley