如何在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的支持,而LLVM只在x86上提供。其他体系结构需要80位浮点数的软件实现,但是编译器没有提供。

iphone基于ARM架构,与x86不同,它从未在硬件上实现过80位浮点运算。这种格式在模拟器中是可用的,因为在模拟器中运行的程序是为运行模拟器的主机的体系结构编译的,它是基于x86的(尽管随着苹果硅迁移正在进行,这种情况不会持续太久)。

如果您需要比64位格式所能提供的更高的浮点精度,请切换到库实现(它可以提供任意精度)或128位格式(通常在软件中实现)。Swift目前似乎还不支持Float128,尽管将来会增加这样的支持。

最新更新