Linux与Mac上的四倍精度

Quadruple precision on Linux vs. Mac

本文关键字:四倍 精度 Mac Linux      更新时间:2023-10-16

我编写了一个多维数值集成代码,该代码能够在Linux中以双重,长或四倍的精度运行。所有模式都完美地编译和工作,但是当我尝试为Mac上的四倍精度案例编译相同的代码时,我最终遇到了错误,我不确定它们的含义。

我正在编译G ,但我尝试了其他编译器(我确实尝试了Clang只是为了看看它会做什么,但据我所知,它不能支持四倍的精度?如果我错了,请纠正我)。

我链接相关库和标题(包括quadmath.h头),我最终遇到了这些错误来自quadmath.h:

Unsupported machine mode 'TC'
typedef _Complex float __attribute__((mode(TC))) __complex128
error unknown type name '__float128'

__float128错误也重新出现了各种数学操作,例如acosq,asinq等...

我以前从未遇到过不支持的机器模式错误。我看了看GNU编译器注释GNU编译器音符和GNU浮动类型。

很难为人们进行编译和测试,因此很难进行编译和测试,因此我只是想追踪错误以找出出了什么问题,但是我不确定在此阶段该怎么做。给定这些错误消息的下一步是什么?关于Linux与MAC,我是否缺少一些东西?我一直在Linux中进行编码,因此对后者不熟悉,似乎有一种方法可以与Mac上的四倍精度计算相比。

谢谢您的帮助

-yeti

不同的架构(CPU类型/操作系统)并不总是支持相同的浮点类型。从您的问题中的错误消息来看,在您试图编译代码的Mac上不支持" __Float128"。

有两种不同的方法来解决这个问题。最简单的是将预处理器指令添加到您的代码中,以确保仅编译代码的某些部分;即,目标体系结构支持浮点类型的浮点类型。不幸的是,这将意味着您程序的Mac版本将无法使用四倍精度。

更难的解决方案是自己实现四倍精度浮点键入或找到已经实现它的库。我猜这些自定义类型不会像本地支持的类型那样快,但是至少您将能够获得所需的精度。