Schnellstes Min Max zwischen drei Floats in C

7

Ich denke, die Frage ist ziemlich klar: Ich habe drei Zahlen, ich habe zwei Funktionen, min und max.

Was sind die schnellsten Implementierungen?

    
Zaki Mohzani 15.11.2011, 11:23
quelle

4 Antworten

16

Der C-Standard (C99) bietet die fmaxf und fminf Funktionen im Standard C math.h Kopfzeile. Ich würde damit beginnen, den größten von drei Floats zu finden und dann zu überprüfen, ob es für Ihre Bedürfnisse schnell genug ist:

%Vor%     
Frerich Raabe 15.11.2011 11:33
quelle
5

Naive Lösung ist zwei verwenden zwei Vergleiche, um die min und dann zwei Vergleiche zu finden, um das Maximum zu finden. Dies ist nicht optimal, da drei Vergleiche genügen (Pseudocode-Returning (Min, Max) -Tupel folgt):

%Vor%

(Dies wird geschrieben, um am besten lesbar zu sein, anstatt die Verzweigungsanzahl zu minimieren)

Dies führt zwischen 2 und 3 Vergleiche durch. Es ist unmöglich, nur 2 Vergleiche zu verwenden, da es 3 gibt! = 6 Neuordnungen von 3 Floats und 2 Vergleichen können nur zwischen 4 verschiedenen unterscheiden. Dies ist leicht in einem Entscheidungsbaum des Problems zu sehen.

In der Praxis sollte man sich für Optimierungen wie diese auf den Compiler verlassen.

    
Adam Zalcman 15.11.2011 11:48
quelle
2

Code, um die größte der drei Zahlen zu finden.

%Vor%

Kehre die Logik um, um das Geringste zu finden:)

    
Pradeep Nayak 15.11.2011 11:34
quelle
2

Ich mochte Adam Zalcmans Ansatz so sehr, dass ich ihn in C umschrieb und diesmal auch die Verzweigungen minimierte (also höchstens 3 Vergleiche und 3 Zweige).

%Vor%

(das kann jetzt allerdings in Code Golf degenerieren ...)

    
Useless 15.11.2011 14:54
quelle

Tags und Links