![]() |
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:
Meine Frage: ist dieser Algorithmus für alle Zielplattformen gültig oder muss tol angepasst werden?
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; Gruß Willie. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 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