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.