![]() |
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 |
Re: Floatingpoint exception nur auf einem CPU
Wie wärs, wenn du etwas Code zeigst?
|
Re: Floatingpoint exception nur auf einem CPU
Gibt es auf besagtem PC auch mit anderen Programmen Probleme ?
|
Re: Floatingpoint exception nur auf einem CPU
Zitat:
Zitat:
Ich glaube das Problem liegt an der Initialisierung der FPU, genauere Infos dazu gibts in diesem ![]() Wir probieren gerade den dort vorgeschlagenen Workaround aus. |
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. |
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 |
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