Thema: Delphi Größe von Extended

Einzelnen Beitrag anzeigen

Willie1

Registriert seit: 28. Mai 2008
618 Beiträge
 
Delphi 10.1 Berlin Starter
 
#11

AW: Größe von Extended

  Alt 31. Jul 2022, 11:02
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.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat