Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Größe von Extended (https://www.delphipraxis.net/211117-groesse-von-extended.html)

Willie1 31. Jul 2022 11:02

AW: Größe von Extended
 
Ich habe jetzt die Hilfe verstanden.

Nach diesen vielen Antworten will ich erklären, worum es mir bei der Frage ging. Bei den Metadaten eines Bildes werden Gleitkommazahlen als Zähler und Nenner (=Integer) gespeichert.
Ich bin in der Entwicklerecke fündig geworden.
Delphi-Quellcode:
procedure FloatToFrac(const x: Extended; out Numerator, Denominator: Int64);
const
 tol = 1e-12; // Fehlertoleranz
var
  p, lastp, q, lastq, ptemp, qtemp, u, err, d: Extended;
begin
  // Initialisierung
  p := 1;
  q := 0;
  lastp := 0;
  lastq := 1;
  u := x;

  repeat
    // Einen ganzzahligen Anteil abspalten
    d := round(u);
    u := u - d;

    // Update von p und q: Kettenbruch (siehe unten) nachführen. Es gilt: p/q ~= x
    ptemp := p*d+lastp;
    qtemp := q*d+lastq;
    lastp := p;
    lastq := q;
    p := ptemp;
    q := qtemp;

    // Approximationsfehler
    err := abs(p/q-x);

    // Abbruchkriterien
    if (u=0) or (err<tol) or (x+err/4=x {sic!}) then // (*)
     break;

    // Bruch umkehren
    u := 1/u;
  until false;

  // Vor Integerkonversion auf Bereich überprüfen
  if (p>high(Int64)) or (q>high(Int64)) or
     (p<low(Int64)) or (p<low(Int64)) then
    raise EIntOverflow.Create('FloatToFrac: Integer conversion overflow.');

  // Vorzeichen von Nenner zum Zähler
  if q < 0 then
   Numerator := -Trunc(p) else
   Numerator := Trunc(p);
  Denominator := abs(Trunc(q));
end;
Meine Frage: ist dieser Algorithmus für alle Zielplattformen gültig oder muss tol angepasst werden?
Gruß Willie.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.
Seite 2 von 2     12   

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