声明:参考彭国伦先生《Fortran95程序设计》

Fortran中KIND可以看作是用来声明整型数、浮点数变量所占用的内存字节,当KIND搭配上一些Fortran 90的库函数,可以增加程序代码的跨平台能力。在编译器中,各类变量所保存的至于范围如下:

integer(kind=1)          -128~127
integer(kind=2)          -32768~32767
integer(kind=4)          -2147483648~2147483647
real(kind=4)             ±1.18*10**38~±3.40*10**38

real(kind=8)             ±2.23*10**308~±1.79*10**308


Fortran 90 提供库函数来判断所要记录的数值值域范围所需要的kind值。

SELECTED_INT_KIND(n)
!返回如果想要记录n位整数时,所应声明的kind值。返回-1时,表示无法提供所想要的至于范围
SELECTED_REAL_KIND(n,e)
!返回如果想要能够记录具有n位有效位数、指数达到e位的浮点数所需的kind值。返回-1表示无法满足所需要的有效位数、返回-2表示无法满足所要求的指数范围、返回-3表示两者都无法满足。

下面举个“栗子”:

program mainimplicit noneinteger,parameter :: long_int = selected_int_kind(9)!判断可以记录9个位数的整数kind值integer,parameter :: short_int = selected_int_kind(3)!判断可以记录3个位数的整数kind值integer,parameter :: long_real = selected_real_kind(10,50)!判断可以记录10个有效数,指数可以记录到50的浮点数kind值integer,parameter :: short_real = selected_real_kind(3,3)!判断可以记录3个有效数,指数可以记录到3的浮点数kind值integer(kind=long_int) :: a=12345678integer(kind=short_int) :: b=12real(kind=long_real) :: c=1.2356488D45real(kind=short_real) :: d=1230write(*,"(I3,1X,I10)") long_int,awrite(*,"(I3,1X,I10)") short_int,bwrite(*,"(I3,1X,E10.5)") long_real,cwrite(*,"(I3,1X,E10.5)") short_real,dend

上述程序运行的计算结果为:


上述“栗子”中的long_int、short_int 等几个变量都是用来记录KIND值,在程序执行中不会再改变内容,所以对其采用PARAMETER常数声明。而彭国伦先生指出:这个方法其实不太必要,但这样做的原因主要是想在不同机器上保存同样位数的数值,不同的机器是指“等级不同”的机器。查询出各种数值范围所需要的KIND值,可以有效地视需要来使用内存。而所编的程序代码也会比较有“共通性”,因为有可能某个编译器可以提供kind=1的类型。而某些编译器则不行。在程序中不直接用常数,使用sclected_int_kind之类的函数根据程序的需要决定kind值,可以使程序代码更容易在不同的机器之间移植。

Fortran系列(一):KIND的用法相关推荐

  1. Go基础系列:双层channel用法示例

    Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...

  2. Fortran moudle/subroutine/function 的用法示例

    吐槽:作为一个Fortran 语言的初学者,本人深刻体会到 fortran 对于像我这样母语是C 的编程小白的强烈不友好!几天不碰,想要实现一个小小的功能就举步维艰.所以我觉得还是要多总结,今天闲来无 ...

  3. C语言实用算法系列之二级指针用法简介

    一.几个知识点 内存四区:栈.全局(静态),常量区,除此以外剩余的空间暂时不能随意使用:除此以外剩余的空间只要通过malloc函数申请一下,就可以使用了: 申请一个堆上的单个int变量的方法:int* ...

  4. Android系列之butterknife基本用法

    现在安卓项目开发中,butterknife是比较常用的注解框架,从而简化了findViewById的重复使用,提高了编程的效率 然而为什么要使用butterknife?一方面是为了提高编程效率,一方面 ...

  5. pyecharts系列之Bar的用法

    文章目录 准备工作 一.柱状图 二.堆积柱状图 三.瀑布图 四.直方图 五.条形图 六.配置 1.主题配置 2.区域缩放 3.标记线 4.标记点 准备工作 1.安装库pyecharts 以下代码默认版 ...

  6. 音视频系列--OpenSL ES基础用法总结

    一.前置 OpenSL ES全称为Open Sound Library for Embedded Systems,及嵌入式音频加速标准.OpenSL ES是无授权费.跨平台.针对嵌入式系统封精心优化的 ...

  7. [Vuex系列] - Mutation的具体用法

    更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...

  8. C#面向对象系列(2):构造函数的用法

    1. 如果不为类编写构造函数,编译器就会创建一个默认的构造函数,运行时会在创建新对象时调用它. 2.  构造函数互相之间的可链接关系  1using System;  2  3namespace We ...

  9. Hadoop系列之InputFormat,OutputFormat用法

    首先看下InputFormat接口的代码 public interface InputFormat<K, V> {InputSplit[] getSplits(JobConf var1, ...

  10. 【CSS系列】background-clip 定义用法

    background-clip 属性规定背景的绘制区域. background-clip 有三个属性 border-box 背景被裁剪到边框盒. padding-box 背景被裁剪到内边距框. con ...

最新文章

  1. OVS之vhost-net中VM通信(九)
  2. linux组群账户存放在,linux用户和群组
  3. (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义
  4. Linux 内核里的数据结构——基数树
  5. android ExpandableListView详解
  6. axure 坐标扩散效果
  7. MessageDigest 详解
  8. 轴承的Abaqus静态分析
  9. 工业设计与钣金工艺是怎么相互相成的
  10. linux 配置软件安装源
  11. Git命令使用出现Cannot update paths and switch to branch xxx at the same time解决方法
  12. 关于CDN那些名词,你知道吗?
  13. 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
  14. 使用pandas读取excel表格如何去掉标题
  15. React——相关js库以及使用React开发者工具调试
  16. LSB低位隐写(菜鸡理解)
  17. 一篇读懂无线充电技术(附方案选型及原理分析)
  18. 阅读epub书籍很卡问题 解决
  19. C#中的委托和事件(分分钟上手)
  20. 华工计算机组成原理第一次作业,华工网络教育学院2018计算机组成原理作业

热门文章

  1. OpenGL(十七)——Qt OpenGL在三维空间移动位图(会动的星星)
  2. C语言4位BCD码加法器,四位二进制BCD码加法器.doc
  3. 串口异步通讯和同步通讯
  4. 用手机打开word图表位置很乱_9个工作中经常用到的Word技巧,能大大提升你的工作效率...
  5. 【词法分析和语法分析】编译原理实验一(hit)2022-lab1
  6. plotyy函数_转载:MATLAB关于plotyy函数的使用三例
  7. 揭开智慧校园的神秘面纱
  8. 504 压测geteway_504 Gateway Time-out是怎么回事?
  9. 2020.10.25丨全长转录组结构分析之可变剪切、lncRNA预测
  10. Office2007注册码