簡體   English   中英

替換`fabs`,`fmax`等,以便在64位iOS設備上與CGFloat一起使用

[英]Replacement for `fabs`, `fmax`, etc. for use with CGFloat on 64-bit iOS devices

考慮這樣的布局代碼:

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 float 。)

選項

一些選項(我不確定哪個是最好的):

1.定義我自己的宏

#if defined(__LP64__) && __LP64__
#define cgfmax(x,y) fmaxf(x,y)
#else
#define cgfmax(x,y) fmax(x,y)
#endif

然后我可以用cgfmax替換fmax

2.使用tgmath.h

這堆棧溢出答案從2011年建議更換math.htgmath.h 這取代了fmax的實現,在每個參數上調用__typeof__ ,並根據參數類型返回fmaxfmaxf

3.忽略此問題

由於CGFloats涉及布局,數據損失可能發生存儲floatdouble通常是微不足道的。 也就是說,它們將代表微小的像素部分。

摘要

我正在尋找之前完成32位到64位轉換的人的任何其他選項或有用建議。

float轉換為double時,不會發生任何“數據丟失”。 轉換總是准確的。

您的解決方案1和2在語義上完全等同,但(2)在風格上更正確。

您的解決方案3正式不相同; 它可能會在float和double之間產生額外的轉換,這可能會使效率略低(但實際結果是相同的)。

基本上,沒關系,但使用tgmath

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM