iphone - 如何在 iPhone 上使用 Swift 数据类型 Float80
问题描述
我正在使用当前(2021 年 1 月)版本的 Xcode 和 iPhone 12。我需要一些额外的精度来计算天文学函数的浮点计算。Xcode 和 Swift 支持 Float80 类型,我使用它更新了程序。它适用于 Xcode iPhone 模拟器。但是当我尝试将应用程序加载到我的 iPhone 12 时,它不会,并且消息说 Float80 “在目标上不可用”。
我做错了什么,还是我的期望不正确?我可以使用另一种方法来获得标准的 80 位浮点数吗?
解决方案
你没有。
80 位浮点格式仅由一种 CPU 架构(尽管是一种流行的架构)原生支持,即 x86。即使在那里,它也被认为有些过时,因为它仅在旧版 x87 指令集中受支持(而不在现代软件首选的 SSE 指令集中)。提供该格式主要是为了与旧软件的 ABI 兼容性;Swift 对它的支持取决于 LLVM 的支持,而后者又只在 x86 上提供。其他架构需要 80 位浮点的软件实现,但编译器不提供。
iPhone 基于 ARM 架构,与 x86 不同,它从未在硬件中实现 80 位浮点运算。这种格式仅在模拟器中可用,因为在模拟器中运行的程序是针对运行模拟器的主机架构编译的,该架构基于 x86(尽管 Apple Silicon 迁移正在进行中,但这种情况不会持续太久)。
如果您需要比 64 位格式提供的更高的浮点精度,请切换到库实现(可能提供任意精度)或 128 位格式(无论如何通常在软件中实现)。似乎 Swift 目前不支持Float128
,但计划在未来添加此类支持。
推荐阅读
- javascript - 如何在函数内部动态设置模板引用
- javascript - 如何通过 id 或 class_name 从另一个 div 标签获取动态 html 警报内容(文本)?
- python - 将列表值分配给 Pandas df 列会生成 NaN 或长度错误
- php - 将相似的值放在php Json中的数组中
- r - 获取变量组合矩阵
- typescript - 在带有 p5js 的打字稿中使用具有正确类型的 loadTable
- python - 如何使用python提取以兄弟节点信息为条件的节点信息?
- python - 如何为 np.savetxt 正确添加头,从列表和 np..ndarray 转换为我需要的?
- windows - Windows Task Sheduler + pytesseract + 多处理有什么问题?
- ios - 如何将文本字段中的字符串转换为 Swift 中的 Int?