我正在尝试使用gfortran(gcc版本5.3.1和x86_64-linux-gnu)更改abs
和sign
的精度。
我知道我可以更改为dabs
和dsign
以获得双精度但是四倍精度怎么样呢?
例如,对于sqrt(x)
,我只需将arg更改为x **(0.5q0),并将arg定义为real(16)
。我读到一些编译器没有以四元组或扩展精度实现的内部例程,参见例如here
答案 0 :(得分:4)
如果Activity
编译时支持libquadmath(在Linux上通常是这样),那么它立即支持它。您需要做的就是声明变量和文字的四倍精度,并使用通用版本gfortran
和abs
。
但是,使用sign
不可移植(且过时)。更好地使用标准化的内容,例如real(16)
。
这是一个简短的例子来说明这一点:
selected_real_kind(p=30)
输出结果为:
program test
integer, parameter :: qp = selected_real_kind(p=30)
real(qp) :: a
a = -2._qp
print *, abs(a)
print *, sqrt(-a)
end program
将此与Wolfram alpha的结果进行比较:
2.00000000000000000000000000000000000
1.41421356237309504880168872420969818
答案 1 :(得分:0)
或... https://software.intel.com/en-us/node/525335
PROGRAM!SUBROUTINE!FUNCTION
USE ISO_C_BINDING
IMPLICIT NONE
REAL(KIND=C_LONG_DOUBLE) :: A
!or maybe...
REAL(C_LONG_DOUBLE) :: B
...