首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于64位CGFloat设备上的“for”、“`fmax`”等的替换

用于64位CGFloat设备上的“for”、“`fmax`”等的替换
EN

Stack Overflow用户
提问于 2013-10-21 22:51:31
回答 1查看 2.4K关注 0票数 11

问题

考虑一下这样的布局代码:

代码语言:javascript
复制
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设备?

(当前代码没有考虑yCoordinateOfSomeOtherViewfloat还是double。)

选项

有几个选择(我不确定哪一个最好):

1.定义我自己的宏

代码语言:javascript
复制
#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__并根据参数类型返回fmaxfmaxf的实现。

3.忽视这一问题

由于CGFloats与布局有关,将float存储到double中可能导致的数据丢失通常是微不足道的。也就是说,它们将代表像素的很小一部分。

摘要

我正在寻找任何其他选择或有益的建议,从谁做了32位到64位以前的转换。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-21 23:21:05

在将float转换为double时,不会发生任何“数据丢失”。转换总是精确的。

您的解决方案1和2在语义上完全等价,尽管(2)在文体上更正确。

您的解决方案3在形式上不是等价的;它可能会导致浮点数和双值之间的额外转换,这可能会使它的效率略有降低(但实际结果是相同的)。

基本上,这并不重要,但请使用tgmath

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19506238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档