Einzelnen Beitrag anzeigen

Rollo62

Registriert seit: 15. Mär 2007
4.116 Beiträge
 
Delphi 12 Athens
 
#1

EnsureRange vs. Min( 0, Max( 1, Value )) unter CrossPlatform

  Alt 2. Sep 2022, 08:01
Hallo zusammen,

ich möchte eine Zahl in einem Bereich begrenzen und dafür gibt es ja EnsureRange:
Delphi-Quellcode:
function EnsureRange( const AValue, AMin, AMax : Single ) : Single;

function EnsureRange(const AValue, AMin, AMax: Single): Single;
begin
  assert(AMin <= AMax);
  if AValue < AMin then
    Result := AMin
  else if AValue > AMax then
    Result := AMax
  else
    Result := AValue;
end;
Die ist aber nicht inline und hat noch den assert
Wobei die Funktionen Min/Max inline sind und auf den assert verzichten.

Delphi-Quellcode:
function Min(const A, B: Single): Single; overload; inline;

function Min(const A, B: Single): Single;
begin
  if A < B then
    Result := A
  else
    Result := B;
end;
Ich frage mich welche Version performanter ist, wenn ich auf einen assert verzichten kann und das auch auf allen Platformen benutzen möchte:

Delphi-Quellcode:
    Result := EnsureRange( 0.0, 1.0, AValue );
    // oder
    Result := Min( 0.0, Max( 1.0, AValue ) );
Es sollte eigentlich EnsureRange sein, ich bin mir da aber nicht sicher wie und ob die verschiedenen Compiler das optimieren.
Vielleicht hat da jemand einen Hinweis für mich ?
  Mit Zitat antworten Zitat