2010-12-09 9 views

Antwort

3

fabs() liefert einen double (64-Bit), aber CGFloat ist definiert als ein float (32-Bit) zu sein. Es ist im Allgemeinen harmlos - ich persönlich würde sogar die Compiler-Warnung deaktivieren, da Berechnungen unter Verwendung von double Werten typischerweise mindestens so schnell sind wie die Verwendung von float Werten.

+0

"Die Ausführung von Berechnungen mit doppelten Werten ist in der Regel mindestens so schnell wie die Verwendung von Float-Werten." Bist du dir da sicher auf dem ARM? –

+1

ARM hat in dieser Hinsicht ähnliche Eigenschaften wie PowerPC. So weit ich weiß, müssen beide Prozessoren Gleitkommawerte nach dem Ausführen von Berechnungen explizit "verkürzen", um sie wieder in Gleitkommazahlen zu zerlegen, bevor sie in Registern gespeichert werden. Die Leistungscharakteristika sind jedoch möglicherweise nicht die gleichen wie im Daumencode, wo der Platz vielleicht wichtiger ist. –

+0

Aha, danke! Ich entschied mich für CGFloat, das im Code hässlich aussieht. Haben Sie niemals eine Compiler-Warnung deaktiviert? – user7865437

2

Eine bessere Antwort ist die Verwendung #include <tgmath.h>. Dieser Header definiert "adaptive" Funktionen, die die richtige Funktion für die Parametergröße aufrufen.

Mit diesem Header enthalten, können Sie einfach fabs aufrufen, ohne diese Warnung zu bekommen (noch Sorgen über den Verlust der Genauigkeit verursacht durch die Verwendung der falschen Funktion).

Verwandte Themen