Einzelnen Beitrag anzeigen

Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.041 Beiträge
 
Delphi XE2 Professional
 
#1

Bruch ermitteln

  Alt 30. Sep 2018, 15:56
Ich habe zwei Werte TL und FTL, beide vom Typ Word.
TL ist im Bereich 1 bis $7FFF.
FTL ist im Bereich 400 bis 1200.
Gesucht ist ein Bruch, für den gilt:
FTL * Nominator div Denominator = TL (bzw. möglichst nahe bei TL)
Eine Nebenbedingung ist, dass Nominator und Denominator im Bereich 1 bis 255 (Bytes) liegen müssen.

Ich verwende z.Zt- die nachstehende Funktion.
Weiß jemand einen eleganteren Weg?


Delphi-Quellcode:
PROCEDURE GetFraction(FTL,TL:Word; var Numerator,Denominator:Byte);
var M,N,Delta,BestDelta:Integer; BestNumerator,BestDenominator:Byte; Ratio:Double;
begin
   M:=Max(TL,FTL);
   BestDelta:=MaxInt;
   for N:=245 to 255 do begin
      Ratio:=N/M;
      Numerator:=Round(TL*Ratio);
      Denominator:=Round(FTL*Ratio);
      Delta:=Abs(TL-FTL*Numerator div Denominator);
      if Delta=0 then Exit;
      if Delta<BestDelta then begin
         BestDelta:=Delta;
         BestNumerator:=Numerator;
         BestDenominator:=Denominator;
      end;
   end;
   Numerator:=BestNumerator;
   Denominator:=BestDenominator;
end;
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat