ios - 跨 iOS 设备的 float 是否具有确定性?

标签 ios objective-c floating-point deterministic

我有几个关于 float 和 iOS 设备的问题:

在给定的 iOS 设备上, float 是否具有确定性?
float 在所有 iOS 设备上都是确定的吗?

如果不是,是否有办法使它们具有确定性?我在想的是:更改编译器设置、使用简化的数学运算集等。

如果没有任何办法,最好的选择是什么?
我可以改用定点吗?这是否意味着使用 NSDecimalNumber?

干杯。

最佳答案

相同数据大小的结果应该是相同的。 IEEE 浮点标准规定了对不同大小的 float 进行不同浮点运算的结果。

如果不同数据类型的定义因架构而异,您可能会遇到麻烦。

“float”的大小在 ANSI C 中没有正式定义。它在某些平台上可以是 4 个字节,在其他平台上可以是 8 个字节。 (例如,NSInteger 在 32 位设备上是 32 位,在 64 位设备上是 64 位。我知道它是一个整数类型,但它是一个根据平台改变大小的类型的例子。)

我不知道 Apple 是否更改了其 32 位和 64 位平台之间任何数据类型的大小。也许有确切了解的人可以在这里插话。

最新的 iOS 设备是 64 位的。我建议检查 float/CGFloat 的大小(使用 sizeof()。)如果您无法访问新的 64 位设备之一,您应该能够使用 64 位模拟器对其进行测试。

好像是

关于ios - 跨 iOS 设备的 float 是否具有确定性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26441106/

相关文章:

ios - 为什么在 swift 项目中需要 Objective-C 桥接头?

ios - [UILabel numberOfComponentsInPickerView :]: unrecognized selector sent to instance . ..]

ios - __block 变量返回 null。如何访问 __block 变量中的 NSString?

c - 除法期间 float 的位会发生什么变化?

c++ - 加倍加倍是否会导致0.0?如果没有,该如何实现?

ios - Viewcontroller Dealloc 方法永远不会被调用

iphone - 从多任务栏中删除应用程序

ios - 标签栏 Controller : executing code before switching view

iphone - 在 viewDidUnload 中调用 [self <>] 安全吗?

python - 无法将字符串列表转换为 float