单精度实数类型real用来保存带小数的数值变量,适合表示无理数的近似值、长度、电压、温度等连续变化的物理量或数学量。
本文代码
program realDemo
implicit none
real :: pi ! real单精度实数类型定义圆周率近似值
real :: e ! real单精度实数类型定义自然底数近似值
real :: piAddE
real :: piDivE
pi=3.14
e=2.71
piAddE=pi+e
piDivE=pi/e
print "(A)","real单精度实数类型:"
print *,"pi=",pi
print *,"e=",e
print "(A,F8.4)","piAddE=",piAddE
print "(A,F8.4)","piDivE=",piDivE
end program realDemo
编译与运行
(base) hong@hongdeMacBook-Pro 007.real % gfortran exampleReal.f90
(base) hong@hongdeMacBook-Pro 007.real % ./a.out
real单精度实数类型:
pi= 3.14000010
e= 2.71000004
piAddE= 5.8500
piDivE= 1.1587
(base) hong@hongdeMacBook-Pro 007.real %
结果分析
- pi被赋值3.14,输出中却是3.14000010;e被赋值2.71,输出2.71000004
- 以pi为例,fortran语句pi=3.14的含义并非”在内存中精确保存十进制3.14“,而是把十进制字面量3.14转换成当前real类型能表示的最接近值。即使将赋值语句改写成pi=3.1400000000000000,仍输出3.14000010。
- 并非编译器随机产生误差。
- 该结果为浮点数表示方式的正常结果。
- e同理。
- 程序中pi、e都是实数类型变量,所以pi+e和pi/e都按实数运算规则计算。
- piAddE= 5.8500,只是使用”(A,F8.4)”控制了其输出格式,并非代表内存中的值是精确的5.8500。关于输出格式,我将在中级-格式中详解。
- piDivE同理