Ersatz für `fabs`,` fmax` usw. zur Verwendung mit CGFloat auf 64-Bit-iOS-Geräten

Frage

Betrachten Sie den Layout-Code wie folgt:

CGFloat descriptionHeight = // height of a paragraph of text with zero or more words;
CGFloat imageHeight = // height of an image;
CGFloat yCoordinateOfSomeOtherView = fmax(descriptionHeight, imageHeight) + 5.0f;

Wie soll die dritte Zeile mit Unterstützung für 64-Bit-iOS-Geräte umgeschrieben werden?

(Der aktuelle Code berücksichtigt nicht, obyCoordinateOfSomeOtherView ist einfloat oder eindouble.)

Optionen

Ein paar Optionen (ich bin mir nicht sicher, welche am besten ist):

1. Definiere mein eigenes Makro
#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif

Ich könnte dann ersetzenfmax mitcgfmax.

2. Verwenden Sietgmath.h

Diese Stack Overflow Antwort ab 2011 schlägt ersatz vormath.h mittgmath.h. Dies ersetzt die Implementierung vonfmax mit einem, der anruft__typeof__ auf jedes Argument und gibt entwederfmax oderfmaxf abhängig von den Argumenttypen.

3. Ignorieren Sie dieses Problem

Da sich CGFloats auf das Layout beziehen, kann der Datenverlust beim Speichern einesfloat in eindouble wird in der Regel unbedeutend sein. Das heißt, sie repräsentieren winzige Bruchteile von Pixeln.

Zusammenfassung

Ich suche nach anderen Optionen oder hilfreichen Ratschlägen von jemandem, der zuvor einen 32-Bit- auf 64-Bit-Übergang durchgeführt hat.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage