1

我编写了一个多维数值积分代码,它能够在 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 上进行四倍精度计算的方法与我习惯的方法不同。

谢谢您的帮助

-雪人

4

1 回答 1

0

不同的架构(cpu 类型/操作系统)并不总是支持相同的浮点类型。从您问题中的错误消息来看,您尝试编译代码的 Mac 不支持“__float128”。

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

更难的解决方案是自己实现一个四精度浮点类型,或者找一个已经实现它的库。我猜这些自定义类型不会像原生支持的类型那么快,但至少你将能够获得你想要的精度。

于 2016-12-21T12:58:25.053 回答