一、数据类型
在C++中,其数据类型有布尔型(bool)、字符型(char)、整型(int)、浮点型(float)、双浮点型(double)等,并且一些基本类型可以使用一个或多个类型修饰符(signed、unsigned、short、long)进行修饰,使得C++具有丰富的数据类型。
相比于C++,Fortran中的数据类型有整型(integer)、实型(real)、复数型(complex)、逻辑型(logical)、字符型(character)等,没有类似于C++中的修饰符。
由于C++中可通过修饰符控制变量的精度范围,类似地,在Fortran中,可通过Kind值来控制精度范围。
二、Kind值
Kind 的正式名称叫“种别”,是区分同一种数据类型,但不同长度、或精度、或编码方式的一种代号。他在编译时决定!Kind 受编译器的影响,具体数值可能会有差异。Kind 对不同的变量类型,表达的意思也不相同。
对 Integer ,Kind 值影响整数能表达的最大范围;对 Real 和 Complex, Kind 值影响实数的最大范围和最小精度;对 Character ,Kind 值表示编码。通常为 ASCII 编码;对 Logical , Kind 值表示长度,对逻辑型无影响。
(1)Integer的Kind值
对于Integer来说,其Kind值一般为1、2、4、8,对于大多数编译器,Kind 默认是 4,占有 4 个字节。
不同的Kind值,其取值范围不一样。
Kind值 | 1 | 2 | 4 | 8 |
类型 | 超短整型 | 短整型 | 整型 | 超长整型 |
取值范围 | -2^7~2^7-1 | -2^15~2^15-1 |
-2^31~2^31-1 | -2^63~2^63-1 |
由于某些编译器不支持Kind=8, Kind=1 ,而某些编译器用1、2、3、4 表示,为了代码的适用性和统一性,可以使用函数Selected_Int_Kind,即k = Selected_Int_Kind( i ) 来选择能满足要求的Kind,其中i 表示需要最大的十进制位数,k 表示返回的能满足范围的最小的Kind值。
(2)Real的Kind值
对于Real来说,其Kind值一般为4、8、16,对于大多数编译器,Kind 默认是 4,占有 4 个字节。
不同的Kind值,其取值范围不一样。
由于某些编译器不支持Kind=16,而某些编译器用1、2、3表示,为了代码的适用性和统一性,可以使用函数Selected_Real_Kind,即k = Selected_Real_Kind(r,p) 来选择能满足要求的Kind,其中r 表示需要最大的十进制位数 , p 表示最小的有效位数,k 表示返回的能满足范围的最小的Kind值。
(3)Complex的Kind值
Complex 的数据类型与 Real 一致。
但需要注意的是:如果 Kind=8 的 Real 占用 8 字节,则 Kind=8 的 Complex 占有 16 字节,很多人使用 Complex(Kind=16) 来定义双精度,实际上,这已经是四精度了。
Complex 选择Kind,也使用 Selected_Real_Kind 函数
(4)Character的Kind值
Character 的 Kind,常见只有一种,即 1 表示 ASCII 编码,通常忽略。
也可以使用 Selected_Char_Kind 来选择,即k = Selected_Char_Kind( 'ASCII' )。
(5)Logical的Kind值
Logical 的 Kind,通常与该编译器支持的 Integer 一致,通常忽略,在大多数编译器上,Kind=4,占有4字节。
任何 Kind 值的 Logical 都只能表示真、假两个状态。
Logical 没有可以选择Kind值的函数。通常只有在混编时,才会需要更改 Kind 值。
三、各种数据类型的简单使用
如下代码简单的进行数据类型的测试:
program test implicit none integer,parameter::ip = Selected_Int_Kind(8) integer,parameter::dp = Selected_Real_Kind(15,6) character(len=20)::cform integer(kind=ip)::i=0,j real(kind=dp)::r1=1.,r2=2. complex(kind=dp)::cmplx1 logical::l1=.true. cmplx1=cmplx(r1,r2) !定义复数 write(*,*) '------------------------------------//Test Character' do j=1,3,1 write(cform,*) j write(*,*) 'My file is ','File_Number_'//trim(adjustl(cform))//'.txt'!可用//进行字符串连接 end do write(*,*) '------------------------------------//Test Integer' write(*,*) 'The kind value of i is',kind(i) write(*,*) 'The max value of i is',huge(i) write(*,*) '------------------------------------//Test Real' write(*,*) 'The kind value of r1 is',kind(r1) write(*,*) 'The max value of r1 is',huge(r1) write(*,*) '------------------------------------//Test Complex' write(*,*) 'The complex number is',cmplx1 write(*,*) 'The real part of complex number is',real(cmplx1) write(*,*) 'The imag part of complex number is',imag(cmplx1) write(*,*) '------------------------------------//Test Logical' if(l1) write(*,*) 'I am true ! ^&^' end program test
运行结果为:
此外,对于实型/浮点数而言,一般不做相等判断,因为浮点数存在有效位数,进行相等判断时,有时往往会超出预期,造成严重数值计算错误的后果。
到此这篇fortran 数据类型_fortran简单编程例子的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/fortranbc/2261.html