Gleitkommaarithmetik in Python / Numpy nicht auf allen Maschinen reproduzierbar

8

Vergleicht man die Ergebnisse einer Fließkommaberechnung mit ein paar verschiedenen Maschinen, ergeben sich durchweg unterschiedliche Ergebnisse. Hier ist ein abgespecktes Beispiel, das das Verhalten reproduziert:

%Vor%

Verschiedene Maschinen erzeugen unterschiedliche Ergebnisse wie

  • [-2.85753540d-05 -5.94204867d-05 -2.62337649d-04]
  • [-2.85751412d-05 -5.94208468d-05 -2.62336689d-04]
  • [-2.85754559d-05 -5.94202756d-05 -2,62337562d-04]

aber ich kann auch identische Ergebnisse erhalten, z.B. indem Sie auf zwei MacBooks desselben Jahrgangs laufen. Dies geschieht mit Maschinen, die die gleiche Version von Python und numpy haben, aber nicht notwendigerweise mit den gleichen BLAS-Bibliotheken verbunden sind (z. B. das Framework auf Mac beschleunigen, OpenBLAS auf Ubuntu). Sollten jedoch nicht verschiedene numerische Bibliotheken alle dem gleichen IEEE-Gleitkommastandard entsprechen und genau die gleichen Ergebnisse liefern?

    
Urs 06.05.2015, 00:24
quelle

1 Antwort

3

Fließkommaberechnungen sind nicht immer reproduzierbar.

Sie können reproduzierbare Ergebnisse für schwebende Berechnungen zwischen verschiedenen Maschinen erhalten, wenn Sie dieselben ausführbaren Bilder, Eingaben, Bibliotheken mit demselben Compiler und identische Compilereinstellungen (Schalter) verwenden.

Wenn Sie jedoch eine dynamisch verknüpfte Bibliothek verwenden, können Sie aus verschiedenen Gründen unterschiedliche Ergebnisse erzielen. Zunächst einmal, wie Veedrac in den Kommentaren < Es könnte verschiedene Algorithmen für seine Routinen auf verschiedenen Architekturen verwenden. Zweitens könnte ein Compiler abhängig von Switches unterschiedlichen Code erzeugen (verschiedene Optimierungen, Kontrolleinstellungen). Sogar a+b+c liefert nicht-deterministische Ergebnisse über Maschinen und Compiler hinweg, weil wir nicht sicher über die Reihenfolge der Auswertung und die Genauigkeit der Zwischenberechnungen sein können.

Lesen Sie hier , warum nicht garantiert wird, dass identische Ergebnisse erzielt werden auf verschiedenen IEEE 754-1985 Implementierungen. Neuer Standard ( IEEE 754-2008 ) versucht, weiter zu gehen, aber es garantiert noch nicht identische Ergebnisse bei verschiedenen Implementierungen, weil es beispielsweise Implementierer erlaubt zu wählen, wenn tinyness (Unterlauf Ausnahme) erfaßt wird,

Weitere Informationen über Punkt Determinismus floating in dieser Artikel .

    
Alik 06.05.2015, 14:36
quelle

Tags und Links