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

011.parameterAndDoublePrecision_常量类型与双精度实数

2026年5月15日入门级

parameter用来定义命名常量。命名常量有名字、有类型、有固定值,定义后不能再被重新赋值double precision用来定义双精度实数类型,比单精度real保存更多位有效数字,适合表示精度要求较高的物理常量、科学计算量和工程计算量。

本例代码

! parameter定义命名常量,double precision保存双精度实数。
program parameterDoublePrecisionDemo
  implicit none
  integer,parameter :: speedOfLight=299792458 ! parameter常量:真空光速,国际单位制SI定义的精确值,单位m/s无需用char类型,我在print中写。
  double precision,parameter :: elementaryCharge=1.602176634d-19 ! parameter常量:基本电荷SI精确值,单位C
  double precision,parameter :: avogadroConstant=6.02214076d23 ! parameter常量:阿伏伽德罗常数SI精确值,单位1/mol
  double precision :: lightDistanceOneMicrosecond ! double precision变量:保存光在1微秒内传播的距离
  double precision :: faradayConstant ! double precision变量:保存1摩尔电子电荷量的大小

  lightDistanceOneMicrosecond=speedOfLight*1.0d-6 ! 用真空光速计算光在1微秒内传播的距离
  faradayConstant=avogadroConstant*elementaryCharge ! 用NA*e计算1摩尔电子电荷量的大小

  print *,"parameter常量和double precision双精度实数:"
  print *,"speedOfLight=",speedOfLight,"m/s"
  print "(A,ES16.9,A)","elementaryCharge=",elementaryCharge," C"
  print "(A,ES16.9,A)","avogadroConstant=",avogadroConstant," 1/mol"
  print "(A,F12.6,A)","lightDistanceOneMicrosecond=",lightDistanceOneMicrosecond," m"
  print "(A,F12.4,A)","faradayConstant=",faradayConstant," C/mol"
end program parameterDoublePrecisionDemo

编译运行

(base) hong@hongdeMacBook-Pro 011.parameter-double-precision % gfortran exampleParameterAndDoublePrecision.f90 
(base) hong@hongdeMacBook-Pro 011.parameter-double-precision % ./a.out 
 parameter常量和double precision双精度实数:
 speedOfLight=   299792458 m/s
elementaryCharge= 1.602176634E-19 C
avogadroConstant= 6.022140760E+23 1/mol
lightDistanceOneMicrosecond=  299.792458 m
faradayConstant=  96485.3321 C/mol
(base) hong@hongdeMacBook-Pro 011.parameter-double-precision % 

运行分析

  • speedOfLight定义为integer,parameter :: speedOfLight=299792458,真空光速是SI定义的精确整数值,单位m/s,没有小数部分,所以使用integer,parameter。
  • elementaryCharge定义为double precision,parameter :: elementaryCharge=1.602176634d-19,基本电荷数值很小,并且有效数字较多,所以使用double precision。其中d-19表示双精度科学计数法,即1.602176634*10^-19。
  • avogadroConstant同理是双精度科学计数法6.02214076*10^23。
  • lightDistanceOneMicrosecond的算式是lightDistanceOneMicrosecond=speedOfLight*1.0d-6表示用真空光速乘以1微秒,也就是10^-6秒,得到光在1微秒内传播的距离299792458*10^-6=299.792458m。
  • faradayConstant的算式是faradayConstant=avogadroConstant*elementaryCharge表示用阿伏伽德罗常数乘以基本电荷,得到1摩尔电子电荷量的大小,结果约为96485.3321C/mol。

知识点总结

  • parameter是常量属性,不是单独的数据类型。例如double precision,parameter :: elementaryCharge=1.602176634d-19,命名常量必须在声明时赋值定义后不能再次赋值,否则会编译报错。
  • double precision表示双精度实数,通常比real有更多有效数字,适合科学计算和高精度物理量。
  • d科学计数法用于表示双精度实数字面量:如1.0d-6、1.602176634d-19、6.02214076d23,d0表示10^0,即3.14d0表示双精度实数3.14。
  • 本例中使用parameter要求“该值不可被修改”,double precision解决“该实数需要更多有效数字”的问题。

发表回复

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