abs和sign的四倍精度

时间:2016-07-26 16:32:39

标签: fortran precision fortran90 gfortran

我正在尝试使用gfortran(gcc版本5.3.1和x86_64-linux-gnu)更改abssign的精度。 我知道我可以更改为dabsdsign以获得双精度但是四倍精度怎么样呢?

例如,对于sqrt(x),我只需将arg更改为x **(0.5q0),并将arg定义为real(16)。我读到一些编译器没有以四元组或扩展精度实现的内部例程,参见例如here

2 个答案:

答案 0 :(得分:4)

如果Activity编译时支持libquadmath(在Linux上通常是这样),那么它立即支持它。您需要做的就是声明变量和文字的四倍精度,并使用通用版本gfortranabs

但是,使用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
...