Fortran系列(一):KIND的用法
声明:参考彭国伦先生《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的用法相关推荐
- Go基础系列:双层channel用法示例
Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 双层通道的解释见Go的双层通道 ...
- Fortran moudle/subroutine/function 的用法示例
吐槽:作为一个Fortran 语言的初学者,本人深刻体会到 fortran 对于像我这样母语是C 的编程小白的强烈不友好!几天不碰,想要实现一个小小的功能就举步维艰.所以我觉得还是要多总结,今天闲来无 ...
- C语言实用算法系列之二级指针用法简介
一.几个知识点 内存四区:栈.全局(静态),常量区,除此以外剩余的空间暂时不能随意使用:除此以外剩余的空间只要通过malloc函数申请一下,就可以使用了: 申请一个堆上的单个int变量的方法:int* ...
- Android系列之butterknife基本用法
现在安卓项目开发中,butterknife是比较常用的注解框架,从而简化了findViewById的重复使用,提高了编程的效率 然而为什么要使用butterknife?一方面是为了提高编程效率,一方面 ...
- pyecharts系列之Bar的用法
文章目录 准备工作 一.柱状图 二.堆积柱状图 三.瀑布图 四.直方图 五.条形图 六.配置 1.主题配置 2.区域缩放 3.标记线 4.标记点 准备工作 1.安装库pyecharts 以下代码默认版 ...
- 音视频系列--OpenSL ES基础用法总结
一.前置 OpenSL ES全称为Open Sound Library for Embedded Systems,及嵌入式音频加速标准.OpenSL ES是无授权费.跨平台.针对嵌入式系统封精心优化的 ...
- [Vuex系列] - Mutation的具体用法
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation.Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 ...
- C#面向对象系列(2):构造函数的用法
1. 如果不为类编写构造函数,编译器就会创建一个默认的构造函数,运行时会在创建新对象时调用它. 2. 构造函数互相之间的可链接关系 1using System; 2 3namespace We ...
- Hadoop系列之InputFormat,OutputFormat用法
首先看下InputFormat接口的代码 public interface InputFormat<K, V> {InputSplit[] getSplits(JobConf var1, ...
- 【CSS系列】background-clip 定义用法
background-clip 属性规定背景的绘制区域. background-clip 有三个属性 border-box 背景被裁剪到边框盒. padding-box 背景被裁剪到内边距框. con ...
最新文章
- OVS之vhost-net中VM通信(九)
- linux组群账户存放在,linux用户和群组
- (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义
- Linux 内核里的数据结构——基数树
- android ExpandableListView详解
- axure 坐标扩散效果
- MessageDigest 详解
- 轴承的Abaqus静态分析
- 工业设计与钣金工艺是怎么相互相成的
- linux 配置软件安装源
- Git命令使用出现Cannot update paths and switch to branch xxx at the same time解决方法
- 关于CDN那些名词,你知道吗?
- 计算机各配置性能如何区分,怎么测试电脑性能?判断电脑性能主要看什么?
- 使用pandas读取excel表格如何去掉标题
- React——相关js库以及使用React开发者工具调试
- LSB低位隐写(菜鸡理解)
- 一篇读懂无线充电技术(附方案选型及原理分析)
- 阅读epub书籍很卡问题 解决
- C#中的委托和事件(分分钟上手)
- 华工计算机组成原理第一次作业,华工网络教育学院2018计算机组成原理作业
热门文章
- OpenGL(十七)——Qt OpenGL在三维空间移动位图(会动的星星)
- C语言4位BCD码加法器,四位二进制BCD码加法器.doc
- 串口异步通讯和同步通讯
- 用手机打开word图表位置很乱_9个工作中经常用到的Word技巧,能大大提升你的工作效率...
- 【词法分析和语法分析】编译原理实验一(hit)2022-lab1
- plotyy函数_转载:MATLAB关于plotyy函数的使用三例
- 揭开智慧校园的神秘面纱
- 504 压测geteway_504 Gateway Time-out是怎么回事?
- 2020.10.25丨全长转录组结构分析之可变剪切、lncRNA预测
- Office2007注册码