Rechenfehler mit Double-Gleitkommewerten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von af0815 »

wp_xyz hat geschrieben: Mi 5. Apr 2023, 09:50 Und der in dem Artikel erwähnte Trick mit {$excessprecision on} funktioniert auch nicht...
Wenn das halbwegs Delphi Kompatibel ist, so wirkt das nur im 64 Bit Mode. Zumindest laut Doku von Embarcadero. Das sollte im 32Bit mode auch immer 80Bit verwendet werden. Quelle: https://docwiki.embarcadero.com/RADStud ... 3%BCr_x64)
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von theo »

wp_xyz hat geschrieben: Mi 5. Apr 2023, 09:50 Und der in dem Artikel erwähnte Trick mit {$excessprecision on} funktioniert auch nicht...
Kann ich nicht bestätigen. Bei mir macht das den Unterschied.
Lazarus 2.3.0 (rev main-2_3-2827-g64b27f1207) FPC 3.3.1 x86_64-linux-gtk2

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von af0815 »

Theo, das glaube ich dir, weil du einen 64 Bit Compiler verwendest.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von theo »

af0815 hat geschrieben: Mi 5. Apr 2023, 12:30 Theo, das glaube ich dir, weil du einen 64 Bit Compiler verwendest.
Wp nicht?
viewtopic.php?p=134879#p134879

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von wp_xyz »

theo hat geschrieben: Mi 5. Apr 2023, 12:36
af0815 hat geschrieben: Mi 5. Apr 2023, 12:30 Theo, das glaube ich dir, weil du einen 64 Bit Compiler verwendest.
Wp nicht?
viewtopic.php?p=134879#p134879
Nein. Win-11 mit 64-bit Compiler (Lazarus 2.3.0 (rev main-2_3-3113-g96a18b331f) FPC 3.2.2 x86_64-win64-win32/win64), da hat das keinen Effekt.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von theo »

wp_xyz hat geschrieben: Mi 5. Apr 2023, 14:25 Nein. Win-11 mit 64-bit Compiler (Lazarus 2.3.0 (rev main-2_3-3113-g96a18b331f) FPC 3.2.2 x86_64-win64-win32/win64), da hat das keinen Effekt.
Dann liegt es aber an Linux<>Win und nicht an dem 64bit Compiler?

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von wp_xyz »

Unter Delphi XE 10.4 liefert der 64-Bit-Compiler von Haus aus das richtige Ergebnis, egal ob $excessprecision verwendet wird oder nicht, oder auf on bzw. off steht.

Soner
Beiträge: 724
Registriert: Do 27. Sep 2012, 00:07
OS, Lazarus, FPC: Win10Pro-64Bit, Immer letzte Lazarus Release mit SVN-Fixes
CPU-Target: x86_64-win64
Wohnort: Hamburg

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von Soner »

Niesi hat geschrieben: Mi 5. Apr 2023, 11:12 Witzig ...

Code: Alles auswählen

  f := i * g + (2 * m + 1) * h;

So bekomme ich die Ergebnisse auch korrekt - was ist denn da los???? :shock:
Du verwendest typisierte Variablen in der Formel. Der Compiler kann nur wegen 1 und 2 keine "falsche" Typen mehr nehmen. Du könntest auch wie wp explizite Typumwandlung machen.

theo hat geschrieben: Mi 5. Apr 2023, 14:59
wp_xyz hat geschrieben: Mi 5. Apr 2023, 14:25 Nein. Win-11 mit 64-bit Compiler (Lazarus 2.3.0 (rev main-2_3-3113-g96a18b331f) FPC 3.2.2 x86_64-win64-win32/win64), da hat das keinen Effekt.
Dann liegt es aber an Linux<>Win und nicht an dem 64bit Compiler?
Bei meinem Thema erzählte PascalDragon, dass Extended-Zahlen bei x86-Win64 anders behandelt wird als bei Linux. Vielleicht ist da noch mehr anders.

Damit das ganze nicht off-topic wird bin ich raus dem Thema.

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6762
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von af0815 »

Ist das nicht die richtige Compilerdirektive https://www.freepascal.org/docs-html/pr ... 80001.2.52

$MINFPCONSTPREC : Specify floating point constant precision

weil $excessprecision ist in der FPC Doku für mich nicht auffindbar.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von theo »

af0815 hat geschrieben: Mi 5. Apr 2023, 19:43 weil $excessprecision ist in der FPC Doku für mich nicht auffindbar.
In der Doku finde ich es auch nicht, aber ist schon drin:
https://gitlab.com/freepascal.org/fpc/s ... 05c1e974e1

Und mind. auf Linux 64 macht es auch einen Unterschied.
Eine Doku findet man bei Delphi.

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von wp_xyz »

Mit dem {$MINFPCONSTPREC 64} funktioniert die Rechnung auf Win/64 mit 64-bit Compiler korrekt. Ich habe den wiki-Artikel entsprechend geändert.

theo, wie ist denn der effekt von $excessprecision bzw. minfpconstprec unter Linux? Evtl. muss ich den wiki-Artikel nochmals ändern.

Benutzeravatar
theo
Beiträge: 10856
Registriert: Mo 11. Sep 2006, 19:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von theo »

wp_xyz hat geschrieben: Mi 5. Apr 2023, 20:16 theo, wie ist denn der effekt von $excessprecision bzw. minfpconstprec unter Linux? Evtl. muss ich den wiki-Artikel nochmals ändern.
Habe gerade herausgefunden, dass $excessprecision auf FPC 3.2.2 noch nicht funktioniert hat.
Auf 3.3.1 geht es aber!
Der Effekt ist bei deinem Beispiel bei beiden Varianten gleich. Er entspricht dem "double" casting.

Also kommt der Unterschied vermutlich nicht von der "Bittigkeit" oder dem BS, sondern von der FPC Version.

wp_xyz
Beiträge: 5129
Registriert: Fr 8. Apr 2011, 09:01

Re: Rechenfehler mit Double-Gleitkommewerten

Beitrag von wp_xyz »

Ja, ich kann bestätigen, dass das {$excessprecision on} mit FPC3.3.1 auch beim 64-Bit Compiler unter Windows funktioniert. Habe den wiki-Artikel entsprechend nochmals abgeändert...

Antworten