fortran 佛说如是甚深经典。我从昔来所得慧眼。未曾得闻如是之经。
手气不错
Article

007.real_单精度实数类型

2026年5月12日入门级

单精度实数类型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同理

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注