Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.186 Beiträge
 
Delphi 12 Athens
 
#2

AW: System.Math.InRange(..) mit Epsilon?

  Alt 16. Dez 2016, 20:20
Man war einfach der Meinung, dass niemand sowas braucht.

Delphi-Quellcode:
if InRange(meineZahl, 10.5-, 75.6+DoubleResolution) then

// oder

function InRange(const AValue, AMin, AMax: Double): Boolean;
begin
  Result := (AValue+DoubleResolution >= AMin) and (AValue-DoubleResolution <= AMax);
end;

// oder

function InRange(const AValue, AMin, AMax: Double): Boolean;
begin
  Result := InRange(AValue, AMin-DoubleResolution, AMax+DoubleResolution);
end;
Gut, das "Epsilon" hab ich hier bissl "minimiert" ... man darf es gern für AMin und AMax jeweils entsprechend den Berechnungen in SameValue berechnen, bzw.
Delphi-Quellcode:
function InRange(const AValue, AMin, AMax: Double): Boolean;
begin
  Result := System.Math.InRange(AValue, AMin, AMax) or SameValue(AValue, AMin) or SameValue(AValue, AMax);
end;
InRange bekommt alle Parameter in Registern, die theoretisch auch in der Funktion nicht auf den Stack wandern müssten, falls der Compiler "schlau" genug ist.
Mit einem 4. Parameter für Epsilon und vorallem auch den internen Berechnungen, für ein fehlendes Epsilon, ist das definitiv nicht mehr möglich.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (16. Dez 2016 um 21:21 Uhr)
  Mit Zitat antworten Zitat