Ist Put - Get-Zyklus in Mathematica immer deterministisch?

9

In Mathematica wie in anderen Systemen der Computermathematik werden die Zahlen intern in binärer Form gespeichert. Wenn sie jedoch mit Funktionen wie Put und PutAppend exportiert werden, werden sie in ungefähre Dezimalzahlen umgewandelt. Wenn Sie sie mit Funktionen wie Get zurück importieren, werden sie von dieser ungefähren Dezimaldarstellung in Binärform wiederhergestellt.

Die Frage ist, ob die wiederhergestellte Zahl immer identisch mit der ursprünglichen Binärzahl ist, und wenn nicht immer, in welchen Fällen ist es nicht und wie groß kann der Unterschied sein? Besonders interessiert mich der Put - Get -Zyklus (auf demselben Computersystem).

Die folgenden zwei einfachen Experimente zeigen, dass wahrscheinlich der Put - Get -Zyklus in Mathematica die ursprünglichen Zahlen immer genau wiedergibt, sogar für beliebige Präzisionszahlen:

%Vor%

Aber vielleicht fehlt mir etwas?

AKTUALISIEREN

Mit mehr korrektem Testcode habe ich festgestellt, dass diese Tests in der Realität nur zeigen, dass wiederhergestellte Zahlen identische binäre RealDigits haben, aber ihre Precision s können sich sogar in Equal sense unterscheiden. Hier sind mehr richtige Tests:

%Vor%     
Alexey Popkov 26.06.2011, 07:01
quelle

2 Antworten

5

Ich fürchte, ich kann keine definitive Antwort geben. Wenn Sie in die Textdatei schauen, die Sie sehen, wird sie als etwas wie die InputForm der Werte gespeichert, einschließlich der Genauigkeitsanzeige für Nicht-Maschinen-Präzisionszahlen.

Unter der Annahme, dass Get dieselben Konvertierungsroutinen wie ImportString und ExportString verwendet, kann Ihr Test ein kleines bisschen beschleunigt werden.

%Vor%

Ich habe dies für mehrere hundert Millionen von Zahlen in verschiedenen Bereichen zwischen $ MinMachineNumber und $ MaxMachineNumber getestet und bekomme immer die Originalzahlen zurück. Es ist natürlich kein Beweis, aber es scheint unwahrscheinlich, dass Sie Zahlen sehen, für die das nicht stimmt, wenn es welche gibt (und in diesem Fall wäre der Unterschied so klein, dass er vernachlässigbar ist).

    
Sjoerd C. de Vries 26.06.2011 21:57
quelle
0

Eine wichtige Sache zu wissen ist, dass Put [] / Get [] gepackte Arrays nicht gepackt hält. Sie sollten DumpSave [] auschecken. Es ist viel schneller, da es ein binäres Format ist und Arrays gepackt hält.

    
Joshua Martell 27.06.2011 03:50
quelle

Tags und Links