64-bit floating-point-Portierungen

Ich bin der Portierung meiner Anwendung von 32 bit auf 64 bit. Derzeit ist der code kompiliert unter beiden Architekturen, aber die Ergebnisse sind unterschiedlich. Aus verschiedenen Gründen, ich bin mit Schwimmern statt verdoppelt. Ich gehe davon aus, dass es einige implizite upconverting von float zu double geschieht auf einer Maschine und nicht die anderen. Gibt es eine Möglichkeit zu kontrollieren, für diese, oder bestimmte Hinweise, die ich gesucht werden soll?

bearbeitet, um hinzufügen:

32-bit-Plattform

 gcc (GCC) 4.1.2 20070925 (Red Hat 4.1.2-33)
 Dual-Core AMD Opteron(tm) Processor 2218 HE

64-bit-Plattform

 gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3
 Intel(R) Xeon(R) CPU

Anwendung der -mfpmath=387 hilft ein wenig, nach 1 iteration des Algorithmus die Werte sind die gleichen, aber darüber hinaus, dass Sie fallen out of sync wieder.

Ich sollte auch hinzufügen, dass meine Sorge ist nicht, dass die Ergebnisse nicht identisch sind, ist es, dass die Portierung auf eine 64-bit-Plattform entdeckt hat, ein 32-bit-Abhängigkeiten, die ich nicht bewusst war.

  • Plattform & compiler sind hier relevant...
  • Ja, Sie können erzwingen, dass die FPU. Wie ich bereits in meiner Antwort unten versuchen -mfpmath=387 zu verursachen, es ist nur die Verwendung SSE bei der Verwendung von SSE-Interna.
  • stackoverflow.com/questions/982421/...
InformationsquelleAutor Andrew Prock | 2009-07-02
Schreibe einen Kommentar