AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Was macht: "foo := ord(s[t] >= s[t+1]);" ?
Thema durchsuchen
Ansicht
Themen-Optionen

Was macht: "foo := ord(s[t] >= s[t+1]);" ?

Ein Thema von paule32.jk · begonnen am 19. Mär 2024 · letzter Beitrag vom 20. Mär 2024
 
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.989 Beiträge
 
Delphi 12 Athens
 
#5

AW: Was macht: "foo := ord(s[t] >= s[t+1]);" ?

  Alt 20. Mär 2024, 13:40
Bei dem Schnipsel geht es weniger darum was er macht. Es mehr darum das der Code kryptisch wirkt und Leser zum Grübeln bringt, wie dich jetzt
Und nein, das hat nicht wirklich was mit IF zu tuen.
In Delphi kommt da 0 oder 1 raus. Je nachdem was in s[t] und s[t+1] steht.
Ich denke mal es ging dem Programmierer dabei um Branchless-code um zeitintensive Fehler bei der Branchprediction im Prozessor zu vermeiden . Leider ist der Vergleich eigentlich ach wieder ein branching...
den müsste man noch weg rechnen.

Delphi-Quellcode:
Function GE(const x:integer; const y:integer):integer; Inline;
Begin
  // geklaut hier https://codegolf.stackexchange.com/questions/226238/programming-less-than-greater-than-and-equal-to-functions-using-restricted-
  Result := (x - y + 1) div (abs(x - y) + 1);
end;
foo := GE(s[t],s[t+1]);
Delphi-Quellcode:
// BRANCHLESS COMPARE FUNCTIONS
Function BL_GE(const x,y:Integer):Integer;Inline;
Begin
  Result := (x - y + 1) div (abs(x - y) + 1);
End;
Function BL_LE(const x,y:Integer):Integer;Inline;
Begin
  Result := BL_GE(y,x);
End;
Function BL_E(const x,y:Integer):Integer;Inline;
Begin
  Result := BL_GE(x, y) * BL_LE(x, y);
End;
Function BL_L(const x,y:Integer):Integer;Inline;
Begin
  Result := 1 - BL_GE(x, y); // ODER BL_LE(x, y) - BL_E(x, y)
End;
Function BL_G(const x,y:Integer):Integer;Inline;
Begin
  Result := 1 - BL_LE(x, y); // ODER BL_GE(x, y) - BL_E(x, y)
End;
Andreas
Monads? Wtf are Monads?

Geändert von QuickAndDirty (20. Mär 2024 um 14:23 Uhr)
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:13 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz