问题描述
假设我有以下程序: 程序derp
隐式无
整数,参数: :ikind = selected_real_kind(18)
real(kind = ikind):: a = 2.0 / 3.0
print *,a
结束程序derp
程序 derp
输出 0.6666666865348815917
,这显然不是18位数的精度。但是,如果我使用相同的方法和定义 a = 2.0
和 b = 3.0
,那么 define c = a / b
我得到的输出是 0.666666666666666666685
,这很好。我怎样才能定义一个变量作为整数的商,并让它存储来自 selected_real_kind
?
尝试: real(kind = ikind):: a = 2.0_ikind / 3.0_ikind
原因在于,LHS的精度很高,代码示例中的RHS不是2.0 / 3.0。 Fortran以单精度进行计算,然后将结果分配给LHS。由于LHS的精度很高,因此RHS一侧的计算精度并不高。 digits_kind
是指定常量类型的方法 digits
。
Say I have the following program:
program derp
implicit none
integer, parameter :: ikind = selected_real_kind(18)
real (kind = ikind) :: a = 2.0 / 3.0
print*, a
end program derp
The program derp
outputs 0.6666666865348815917
, which is clearly not 18 digits of precision. However, if I define a=2.0
and b=3.0
using the same method and then define c=a/b
I get an output of 0.666666666666666666685
, which is good. How do I just define a variable as a quotient of integers and have it store all the digits of precision I want from selected_real_kind
?
Try: real (kind = ikind) :: a = 2.0_ikind / 3.0_ikind
The reason is while the LHS is high precision, the RHS in your code example, 2.0 / 3.0, is not. Fortran does that calculation in single precision and then assigns the result to the LHS. The RHS side isn't calculated in higher precision because the LHS is high precision. digits_kind
is the way of specifying the type of a constant digits
.
这篇关于提高由整数商定义的变量的精度的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!