Linux与Mac的四倍精度

时间:2016-12-21 11:06:22

标签: c++ quadruple-precision

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

我正在使用g ++进行编译,但我已经尝试了其他编译​​器(我确实尝试过只是为了看看它会做什么,但据我所知,它不能支持四倍精度?如果我错了,请纠正我。)

我链接了相关的库和标题(包括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 compiler notesGNU floating types

要为人们编译和测试做一个最小的工作示例是很困难的,所以我只是想跟踪错误以找出错误,但我不确定在这个阶段该做什么。给出这些错误消息的下一步是什么?关于Linux vs. Mac,我有什么遗漏的东西吗?我总是用Linux编写代码,所以对后者不熟悉,似乎有一种不同的方法可以在Mac上进行四倍精度计算,而不是以前。

感谢您的帮助

-Yeti

1 个答案:

答案 0 :(得分:0)

不同的体系结构(cpu类型/操作系统)并不总是支持相同的浮点类型。从您问题中的错误消息判断,' __ float128'您尝试编译代码的Mac不支持。

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

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