Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Floatingpoint exception nur auf einem CPU (https://www.delphipraxis.net/95450-floatingpoint-exception-nur-auf-einem-cpu.html)

user0 6. Jul 2007 16:17


Floatingpoint exception nur auf einem CPU
 
Hallo Leute,

ein mit Delphi geschriebenes Programm für umfangreiche numerische berechnungen, liefert unerklährliche Floatingpoint-Exceptions zurück und wird danach instabil. Dies geschieht aber nur auf einem einzigen PC. Die selbe Rechnung wurde auf mindestens 10 anderen Rechnern problemlos gelaufen.

Der fragliche PC hat einen Intel Pentium 4 (2,8 GHz).

Woran kann das liegen? Können irgend welche BIOS-Einstellungen das Problem verursacht haben?

user0

3_of_8 6. Jul 2007 16:22

Re: Floatingpoint exception nur auf einem CPU
 
Wie wärs, wenn du etwas Code zeigst?

Ghostwalker 6. Jul 2007 16:22

Re: Floatingpoint exception nur auf einem CPU
 
Gibt es auf besagtem PC auch mit anderen Programmen Probleme ?

user0 9. Jul 2007 09:54

Re: Floatingpoint exception nur auf einem CPU
 
Zitat:

Zitat von 3_of_8
Wie wärs, wenn du etwas Code zeigst?

Der Programmcode ist bereits über 192300 Zeilen lang, den gebe ich hier lieber nicht als kommentar an :zwinker:


Zitat:

Zitat von Ghostwalker
Gibt es auf besagtem PC auch mit anderen Programmen Probleme ?

Nein, jedenfalls sind noch keine aufgefallen.

Ich glaube das Problem liegt an der Initialisierung der FPU, genauere Infos dazu gibts in diesem Bug-Report.
Wir probieren gerade den dort vorgeschlagenen Workaround aus.

Elvis 9. Jul 2007 11:27

Re: Floatingpoint exception nur auf einem CPU
 
Nicht so ganz on-topic: Habt ihr schonmal FreePascal angesehen für eure Berechnugnen?
Der FPC compiler ist, im Gegensatz zu Delphi, in der Lage auch Instruktionssätze zu nutzen, die nach dem 386 erfunden wurden.
Du könntest die Berechnungen also einfach in eine FPC-kompilierte DLL auslagern, und den GUI-Krams in Delphi lassen.

user0 11. Jul 2007 14:52

Re: Floatingpoint exception nur auf einem CPU
 
Das mit dem FPU-CW hat nicht geklappt.

Kann irgend eine Einstellung in einem BIOS dazu führen, dass mein Programm Fehler ausgibt, oder schlimmer noch: einfach falsch rechnet!?

Nur auf einem PC (von 12) treten Fehler bei der Berechnung auf. Der Debugger springt bei der _TRUNC prozedur in System.pas raus, was nun wirklich nicht sein sollte. Auf allen anderen PCs läuft die Berechnung mit exakt den selben Parametern fehlerfrei.

user0

user0 30. Jul 2007 09:52

Re: Floatingpoint exception nur auf einem CPU
 
Alle Probleme sind nun behoben, indem das control-word immer wieder auf double-precision gesetzt wird.
Die trunc-Funktion liefert falsche ergebnisse, wenn ihr double-Werte übergeben werden:

double x = 1020
Trunc(x) = 1019 !

falls das FPUCW auf Extendet-Precision gestellt ist. Das liegt wahrscheinlich daran, dass beim Konvertieren von x nicht 1020.000..., sondern 1019.999999... raus kommt, was widerum möglicherweise nur auf bestimmten Prozessoren passiert.

user0


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:25 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz