2010-12-09 7 views

Répondre

3

fabs() renvoie un double (64 bits), mais CGFloat est défini comme un float (32 bits). Il est généralement inoffensif - personnellement, je désactiverais même l'avertissement du compilateur, car effectuer des calculs en utilisant double valeurs est généralement au moins aussi vite que l'utilisation de float valeurs.

+0

"effectuer des calculs en utilisant des valeurs doubles est généralement au moins aussi rapide que l'utilisation de valeurs flottantes." Etes-vous sûr de cela sur l'ARM? –

+1

ARM a des caractéristiques similaires à PowerPC à cet égard. Autant que je sache, les deux processeurs doivent explicitement "raccourcir" les valeurs à virgule flottante après avoir effectué des calculs afin de les redescendre dans des flottants avant de les stocker dans des registres. Les caractéristiques de performance peuvent ne pas être les mêmes dans le code du pouce, cependant, où l'espace est peut-être plus important. –

+0

Aha, merci! J'ai décidé de lancer sur CGFloat ce qui semble laid dans le code. Vous n'avez jamais désactivé un avertissement du compilateur? – user7865437

2

Une meilleure réponse est d'utiliser #include <tgmath.h>. Cet en-tête définit des fonctions "adaptatives" qui appellent la fonction correcte sur n'importe quelle taille de paramètre.

Avec cet en-tête inclus, vous pouvez simplement appeler fabs sans recevoir cet avertissement (ni vous inquiéter de la perte de précision causée par l'utilisation de la mauvaise fonction).

Questions connexes