首页 > 解决方案 > 如何在 iPhone 上使用 Swift 数据类型 Float80

问题描述

我正在使用当前(2021 年 1 月)版本的 Xcode 和 iPhone 12。我需要一些额外的精度来计算天文学函数的浮点计算。Xcode 和 Swift 支持 Float80 类型,我使用它更新了程序。它适用于 Xcode iPhone 模拟器。但是当我尝试将应用程序加载到我的 iPhone 12 时,它不会,并且消息说 Float80 “在目标上不可用”。

我做错了什么,还是我的期望不正确?我可以使用另一种方法来获得标准的 80 位浮点数吗?

标签: iphonexcodefloating-pointprecision

解决方案


你没有。

80 位浮点格式仅由一种 CPU 架构(尽管是一种流行的架构)原生支持,即 x86。即使在那里,它也被认为有些过时,因为它仅在旧版 x87 指令集中受支持(而不在现代软件首选的 SSE 指令集中)。提供该格式主要是为了与旧软件的 ABI 兼容性;Swift 对它的支持取决于 LLVM 的支持,而后者又只在 x86 上提供。其他架构需要 80 位浮点的软件实现,但编译器不提供。

iPhone 基于 ARM 架构,与 x86 不同,它从未在硬件中实现 80 位浮点运算。这种格式仅在模拟器中可用,因为在模拟器中运行的程序是针对运行模拟器的主机架构编译的,该架构基于 x86(尽管 Apple Silicon 迁移正在进行中,但这种情况不会持续太久)。

如果您需要比 64 位格式提供的更高的浮点精度,请切换到库实现(可能提供任意精度)或 128 位格式(无论如何通常在软件中实现)。似乎 Swift 目前不支持Float128,但计划在未来添加此类支持


推荐阅读