Fortran:将双精度复杂转换为单精度

时间:2014-11-14 12:55:27

标签: fortran precision

我可以使用sngl将双精度实变量转换为单精度。但是,如何将双精度复变量转换为单精度变量?

2 个答案:

答案 0 :(得分:7)

使用通用REAL()进行所有实数转换,但SNGL()也可用于特定情况:

  integer, parameter :: sp = kind(1e0), dp = kind(1d0)

  real(x)  !converts to the default kind, which is the single precision
           !sngl(x) does the same thing
  real(x, sp) ! converts to the kind sp (single precision)
  real(x, dp) ! converts to the kind dp (double precision)

复杂它是相同的,但使用CMPLX()

  cmplx(x)  !converts to the default kind, which is the single precision
  cmplx(x, sp) ! converts to the kind sp (single precision)
  cmplx(x, dp) ! converts to the kind dp (double precision)

在赋值时,转换是隐式的,您不必(但可以)使用这些显式转换函数。

单精度和双精度的整个概念有点过时,被Fortran 90 kinds取代。

答案 1 :(得分:-2)

您可以在单个精度复杂变量中复制,或 您还可以使用cmplxdcmplx函数:

program test
  complex*16:: a
  complex   :: b
  a = (1.d0, 2.d0)
  b = a

  print *,  a, b
  print *,  cmplx(a), dcmplx(b)
end

输出:

 (1.00000000000000,2.00000000000000) (1.000000,2.000000)
 (1.000000,2.000000) (1.00000000000000,2.00000000000000)