fortran fortran中文资料网
手气不错
Article

014.kindLiterals_kind字面量

2026年5月18日入门级

kind后缀字面量用于指定数值字面量的类别,即该变量的值需使用哪种精度

本文代码

program kindSuffixLiteralsDemo
  implicit none
  integer,parameter :: dp=kind(1.0d0) ! dp保存双精度real的kind值
  print "(A)","kind后缀字面量:"
  print "(A,F20.16)","默认实数字面量3.14=",3.14
  print "(A,F20.16)","D指数双精度字面量3.14d0=",3.14d0
  print "(A,F20.16)","kind后缀双精度字面量3.14_dp=",3.14_dp
end program kindSuffixLiteralsDemo

编译运行

(base) hong@hongdeMacBook-Pro 014.kindLiterals % gfortran exampleKindLiterals.f90 
(base) hong@hongdeMacBook-Pro 014.kindLiterals % ./a.out 
kind后缀字面量:
默认实数字面量3.14=  3.1400001049041748
D指数双精度字面量3.14d0=  3.1400000000000001
kind后缀双精度字面量3.14_dp=  3.1400000000000001
(base) hong@hongdeMacBook-Pro 014.kindLiterals % 

结果分析

  • 普通写法:3.14,表示默认类型实数字面量。由于3.14先以默认实数精度保存,再按F20.16格式输出,所以能看到单精度近似误差。
  • 传统双精度写法:3.14d0,表示双精度实数字面量。3.14d0是双精度实数字面量。d0中的d表示双精度,0表示指数为 10^0。输出为3.1400000000000001比默认3.14保留了更多有效数字,但仍然是二进制浮点近似,不是精确的十进制3.14。
  • kind后缀写法:3.14_dp,表示使用其中的_dp指定的类别。3.14_dp是kind后缀实数字面量。因为本例中:dp=kind(1.0d0),dp表示双精度real的kind值。所以3.14_dp和3.14d0在本例中效果一致,结果相同。

知识点总结

  • kind表示fortran数值类型的种别参数。
  • 同样是real,可以有不同的kind,例如默认实数、双精度实数等。
  • integer,parameter :: dp=kind(1.0d0)表示定义一个整数常量dp,1.0d0表示双精度real的kind值
  • 字面量后面可以加kind后缀,3.14_dp表示这个实数字面量使用dp指定的kind。
    • 3.14d0和3.14_dp都可以表示双精度实数字面量。
    • 3.14d0是传统写法,直接写出双精度。
    • 3.14_dp是kind参数写法,适合大型程序统一管理精度。写法更现代更适合科学计算程序。

发表回复

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