问题
考虑一下这样的布局代码:
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;第三行应该如何重写,支持64位iOS设备?
(当前代码没有考虑yCoordinateOfSomeOtherView是float还是double。)
选项
有几个选择(我不确定哪一个最好):
1.定义我自己的宏
#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif然后,我可以将fmax替换为cgfmax。
2.使用tgmath.h
2011年的This Stack Overflow answer建议用tgmath.h取代math.h。这将fmax的实现替换为对每个参数调用__typeof__并根据参数类型返回fmax或fmaxf的实现。
3.忽视这一问题
由于CGFloats与布局有关,将float存储到double中可能导致的数据丢失通常是微不足道的。也就是说,它们将代表像素的很小一部分。
摘要
我正在寻找任何其他选择或有益的建议,从谁做了32位到64位以前的转换。
发布于 2013-10-21 23:21:05
在将float转换为double时,不会发生任何“数据丢失”。转换总是精确的。
您的解决方案1和2在语义上完全等价,尽管(2)在文体上更正确。
您的解决方案3在形式上不是等价的;它可能会导致浮点数和双值之间的额外转换,这可能会使它的效率略有降低(但实际结果是相同的)。
基本上,这并不重要,但请使用tgmath。
https://stackoverflow.com/questions/19506238
复制相似问题