Reemplazo para `fabs`,` fmax`, etc. para usar con CGFloat en dispositivos iOS de 64 bits
Considere el código de diseño como este:
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;
¿Cómo debería reescribirse la tercera línea con soporte para dispositivos iOS de 64 bits?
(El código actual no tiene en cuenta siyCoordinateOfSomeOtherView
es unfloat
o undouble
.)
Algunas opciones (no estoy seguro de cuál es la mejor):
1. Definir mi propia macro#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif
Entonces podría reemplazarfmax
concgfmax
.
tgmath.h
Esta respuesta de desbordamiento de pila a partir de 2011 sugiere reemplazarmath.h
contgmath.h
. Esto reemplaza la implementación defmax
con uno que llama__typeof__
en cada argumento y devuelve cualquierafmax
ofmaxf
Dependiendo de los tipos de argumento.
Dado que CGFloats se relaciona con el diseño, la pérdida de datos potencialmente incurrida en el almacenamiento de unfloat
en unadouble
Por lo general será insignificante. Es decir, representarán pequeñas fracciones de píxeles.
Estoy buscando otras opciones o consejos útiles de alguien que haya hecho una transición de 32 bits a 64 bits anteriormente.