Transpose 发表于 2022-5-2 11:15
`real(x,kind=8)`
program main
implicit none
real::x
real(8),external::real4real8
x=1.234
write(*,*)x
write(*,*)real(x,kind=8)
write(*,*)real4real8(x)
end program
function real4real8(r4)result(r8)
real,intent(in)::r4
real(8)::r8
character(len=15)::str
write(str,"(ES15.8E2)")r4
read(str,*)r8
end function real4real8
> 1.23399997
1.2339999675750732
1.2339999699999999
GXL 发表于 2022-5-2 11:22
您好,这种方法我尝试过了,我不知道是我编译器的原因还是Fortran77语言的原因,这种方法在转换精度的过 ...
real :: x
real(8) :: y
y = nint(1.d6*x)/1.d6
write(*,*) x, y
y=real4real8(x)
write(*,*) x, y
function real4real8(r4)result(r8)
real,intent(in)::r4
real(8)::r8
character(len=15)::str
write(str,"(ES13.6E2)")r4 !此处的 es13.6 的 6 为保留有效数字-1,即7-1=6
read(str,*)r8
end function real4real8
欢迎光临 Fortran Coder (http://bbs.fcode.cn/) | Powered by Discuz! X3.2 |