我可以使用sngl
将双精度实变量转换为单精度。但是,如何将双精度复变量转换为单精度变量?
答案 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)
您可以在单个精度复杂变量中复制,或
您还可以使用cmplx
和dcmplx
函数:
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)