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:
Aber vielleicht fehlt mir etwas?
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:
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.
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).
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.
Tags und Links wolfram-mathematica