AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SetRoundMode wirkt nicht immer

Ein Thema von Jasocul · begonnen am 15. Mär 2024 · letzter Beitrag vom 15. Mär 2024
Antwort Antwort
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.374 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 13:40
Das würde bedeuten, dass Delphi intern auch den Roundmode benutzt, wenn ohne Rundungsfunktion gerechnet wird. Das halte ich für unwahrscheinlich. Ansonsten ist mir das Thema Gleitzahlarythmetik bekannt. Ist zwar lange her, aber ein paar Semester Mathe-Studium habe ich hinter mir.
Peter
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
727 Beiträge
 
Delphi XE5 Professional
 
#2

AW: SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 14:31
Sorry Peter,
Das würde bedeuten, dass Delphi intern auch den Roundmode benutzt, wenn ohne Rundungsfunktion gerechnet wird.
aber das verstehe ich nicht ganz.
Könntest Du das bitte etwas verdeutlichen?
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.413 Beiträge
 
Delphi 12 Athens
 
#3

AW: SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 14:50
Die Delphi-"Funktionen", arbeiten fast alle mit der FPU und dieser Modus wird in der FPU eingestellt (ich glaub nur für den aktuellen Thread).
Und Jupp, ganzzahlig (Integer) wird in der CPU berechnet, nicht in der FPU, also in den normalen Registern ala EAX anstatt ST0.

Somit hat ein Umstellen, innerhalb des Hauptthreads, auch Einfluß auf alles Mögliche, wie z.B. FireMonkey.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.374 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 17:54
Die Delphi-"Funktionen", arbeiten fast alle mit der FPU und dieser Modus wird in der FPU eingestellt (ich glaub nur für den aktuellen Thread).
Und Jupp, ganzzahlig (Integer) wird in der CPU berechnet, nicht in der FPU, also in den normalen Registern ala EAX anstatt ST0.

Somit hat ein Umstellen, innerhalb des Hauptthreads, auch Einfluß auf alles Mögliche, wie z.B. FireMonkey.
Roundmode ist threadsafe. Deine Vermutung trifft da zu.
Die Einstellung des Mode wirkt sich auf die FPU aus, wenn ich die DOH richtig verstanden habe. Allerdings bin ich davon ausgegangen, dass sich das nur auswirkt, wenn Rundungsfunktion aufgerufen werden. Das Verhalten, das ich festgestellt habe, würde bedeuten, dass es sich auf jede Rechenoperation in der FPU auswirkt.

Das wäre für mich jetzt nachvollziehbar, aber da könnte der Hinweis in der Hilfe deutlicher sein, dass von der Einstellung nicht nur die Rundungsfunktionen in Delphi betroffen sind.
Peter
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.413 Beiträge
 
Delphi 12 Athens
 
#5

AW: SetRoundMode wirkt nicht immer

  Alt 15. Mär 2024, 18:42
Floats sind immer etwas gerundet, da sie keine exakten irrationalen Werte speichern können,
vor allem beim Übergang von Extended/Double/Single in Zwischenberechnungen.

Die genaue Funktion wirst du wohl beim Bei Google suchenFLDCW oder Delphi-Referenz durchsuchenSet8087CW finden, bzw. beim Bei Google suchenLDMXCSR/Delphi-Referenz durchsuchenSetMXCSR für SSE (Delphi-Referenz durchsuchenSetSSERoundMode).
Und zusätzlich noch Delphi-Referenz durchsuchenSetPrecisionMode (ebenfalls FLDCW/Set8087CW)




https://docwiki.embarcadero.com/RADS...int_Arithmetic
https://docwiki.embarcadero.com/RADS...elphi_for_x64)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (15. Mär 2024 um 19:01 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:49 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