gpt4 book ai didi

ios - 基于 CGFloat 的数学函数?

转载 作者:IT王子 更新时间:2023-10-29 07:46:31 26 4
gpt4 key购买 nike

在 OS X 和 iOS 中,Apple 使用 CGFloat typedef 在 32 位系统上自动获取 float,在 64 位系统上自动获取 double。但是当使用普通的 Unix 数学函数时,你需要根据具体情况做出决定。

例如 floor() 函数定义为:

双层(double x);

floorf() 函数定义为:

float floatf(float x);

我知道所有 iOS 设备今天都是 32 位的,但是使用 CGFloat 的原因是在引入第一个 64 位 iOS 设备(iPad 5?)时自动获得更高的精度,而不是必须更改任何代码。但要实现这一点,我们需要基于 CGFloat 的数学函数:

CGFloat Floor(CGFloat x);

iOS或第三方库中是否有类似的功能?或者其他开发人员如何处理这个问题?我怀疑大多数人要么在 iOS 上将 CGFloatfloat 版本一起使用,但是如果为 64- 编译,你将“需要”用数学函数更改每一行位 iOS 设备(并处理两个不同版本的代码库)。

或者您可以到处使用 float 而不是 CGFloat 而不必担心 64 位 iOS。但是这样你就会与 Apple 的库和恕我直言的丑陋代码不一致。

或者您可以将 CGFloatdouble 版本一起使用,并且让编译器始终在 double 和 float 之间转换,从而节省空间和性能。并且不关心可能的“隐式转换为 32 位类型”警告。

或者也许是最好的策略,打赌 64 位版本的 iOS 永远不会出现(或者至少在不久的将来)并使用 CGFloatfloat-Unix 数学函数的版本,不用担心 future 。

您使用什么策略?

最佳答案

编辑:既然我们有了 64 位 iOS,这个问题就不再是理论问题了!

我认为处理这个问题最简单的方法是使用 tgmath.h,而不是 math.h(math.h 由 Cocoa 自动导入,tgmath 不会' 所以你需要在某处声明它)。

Cocoa 邮件列表线程中讨论了许多潜在的解决方案: http://www.cocoabuilder.com/archive/cocoa/291802-math-functions-with-cgfloat.html

我同意该列表中大多数人的观点,即 tgmath 可能是可行的方法。我相信它最初的目的是允许轻松移植 Fortran 代码,但它也适用于这种情况。 TGMath 让你做到:

double floor(double x);
float floor(float x);
long double floor(long double x);

关于ios - 基于 CGFloat 的数学函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5352457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com