Fortran快速入门:
前言
由于是快速入门, 所以就不进行详细的字典级别介绍了, 仅记录常用部分, 充分利用触类旁通的特性
基本程序结构:
program program_name
implicit none
! type declaration statements
! executable statements
end program program_name
- 头尾标记程序的开始和结束
- implicit 作用类似using, 用于隐式类型, 是老版本中的东西
一般不用, 但是不能没有, 所以一般都用的implicit none来关闭隐式类型 - 注意全部的数据定义需要放到程序的开头
命令行编译程序:
cd "d:\Develop\fortran\fortranTest\"
gfortran -ffree-form helloworld.f -o helloworld.exe
.\helloworld.exe
注意一个关键参数 -ffree-form
表示自由格式, 否则程序不能随便空格缩进啥的非常傻逼
数据类型:
- integer
- real
- complex
- character
- logical
变量声明
变量类型[([kind]=数字)] [::] 变量名[,变量名……]
类型说明:
integer(kind=2) :: shortval
integer(kind=4) :: longval
integer(kind=8) :: verylongval
就是在变量声明的后头 (kind=数字), 这部分对于科学计算很重要, 因为至少需要知道运算时变量的精度, 并且可以通过 kind(标识符) 来获取数据的字节数
program checkKind
implicit none
integer :: i
real :: r
character*1 :: c
logical :: lg
complex :: cp
print *,' Integer ', kind(i)
print *,' Real ', kind(r)
print *,' Complex ', kind(cp)
print *,' Character ', kind(c)
print *,' Logical ', kind(lg)
end program checkKind
但是, fortran不支持长整型/长小数
逻辑类型:
.true .false 注意要带点
常量
用parameter修饰
real, parameter :: pi = 3.1415927
运算符:
关系运算符:
由于!
变成了注释, 所以!=
就变成了 /=
逻辑运算符
这里重点看逻辑运算符, 非常的奇怪
操作符 | 描述 | 示例 |
.and. | 所谓逻辑与运算符。如果这两个操作数都为非零,则条件变为真。 | (A .and. B) 为 false. |
.or. | 所谓逻辑OR运算符。如果有两个操作数不为零,则条件变为真。 | (A .or. B) 为 true. |
.not. | 所谓逻辑非运算符。使用反转操作数的逻辑状态。如果条件为真,则逻辑非运算符将返回false。 | !(A .and. B) 为 true. |
.eqv. | 所谓逻辑上相当于运算符。用于检查两个逻辑值等价。 | (A .eqv. B) 为 false. |
.neqv. | 所谓逻辑非对等操作。用于检查两个逻辑值的非对等。 | (A .neqv. B) 为 true. |
运算优先级:
这里先记着
分类 | 运算符 | 关联 |
逻辑NOT和负号 | .not. (-) | 从左到右 |
幂 | ** | 从左到右 |
乘 | * / | 从左到右 |
加 | + - | 从左到右 |
关系 | < <= > >= | 从左到右 |
相等 | == != | 从左到右 |
逻辑与 | .and. | 从左到右 |
逻辑或 | .or. | 从左到右 |
赋值 | = | 从右到左 |
分支语句
支持嵌套
if (logical expression) then
statement
end if
if (logical expression) then
statement(s)
else
other_statement(s)
end if
[name:]
if (logical expression 1) then
! block 1
else if (logical expression 2) then
! block 2
else if (logical expression 3) then
! block 3
else
! block 4
end if [name]
[name:] select case (expression)
case (selector1)
! some statements
... case (selector2)
! other statements
...
case default
! more statements
...
end select [name]
循环语句
这个类似于for循环, 范围[start, stop] , step为步进
do var = start, stop [,step]
! statement(s)
…
end do
这个就是while循环
do while (logical expr)
statements
end do
循环 break & continue
通过给循环添加name, 并exit name
program nestedLoop
implicit none
integer:: i, j, k
iloop: do i = 1, 3
jloop: do j = 1, 3
kloop: do k = 1, 3
print*, "(i, j, k): ", i, j, k
if (k==2) then
exit jloop
end if
end do kloop
end do jloop
end do iloop
end program nestedLoop
cycle = continue
program cycle_example
implicit none
integer :: i
do i = 1, 20
if (i == 5) then
cycle
end if
print*, i
end do
end program cycle_example
程序突然终止:
program stop_example
implicit none
integer :: i
do i = 1, 20
if (i == 5) then
stop
end if
print*, i
end do
end program stop_example
字符串:
直接一个例子来看:
program hello
implicit none
character(len=15) :: surname, firstname
character(len=6) :: title
character(len=25)::greetings
title = 'Mr. '
firstname = 'Rowan '
surname = 'Atkinson'
greetings = 'A big hello from Mr. Beans'
print *, 'Here is ', title, firstname, surname
print *, greetings
end program hello
字符串拼接:
title = 'Mr. '
firstname = 'Rowan '
surname = 'Atkinson'
name = title//firstname//surname
常用字符串函数:
函数 | 描述 |
len(string) | 它返回字符串的长度 |
index(string,sustring) | 在一个字符串找出子串的位置,如果没有找到则返回0。 |
achar(int) | 将整数转换成一个字符 |
iachar© | 它可将一个字符转换为整数 |
trim(string) | 它返回去掉尾随空格的字符串。 |
scan(string, chars) | 它会搜索“string”由左到右(除非back=.true)包含在“string”任何字符的第一次出现。它返回一个整数,该字符,或零的位置,如果没有文字的“字符”已被找到。 |
verify(string, chars) | 它扫描“string”由左到右(除非back=.true)不包含在“string”任何字符的第一次出现。它返回一个整数,该字符的位置,如果只在“字符”的字符被找到,或者没有找则返回零。 |
adjustl(string) | 它留下左截于“string”包含的字符 |
adjustr(string) | 它留下右截于“string”包含的字符 |
len_trim(string) | 它返回一个整数等于“string”(len(string))减去尾随空白的数量 |
repeat(string,ncopy) | 它返回一个字符串长度等于“ncopy”次数“string”的长度,并含有“string”的“ncopy”串联拷贝 |
函数 | 描述 |
lle(char, char) | 进行比较的第一个字符是否是词汇上小于或等于所述第二字符 |
lge(char, char) | 进行比较的第一个字符是否是词汇上大于或等于所述第二字符 |
lgt(char, char) | 进行比较的第一个字符是否是词汇上比第二字符大 |
llt(char, char) | 比较第一个字符是否是词汇上比小于第二字符 |
数组:
Fortran允许最多创建7维数组
program helloworld
implicit none
integer:: arr(5), matrix(5,5), i, j
do i=1,5
do j=1,5
matrix(i, j)=i+j
end do
end do
do i=1,5
do j=1,5
print *,matrix(i, j)
end do
end do
end program helloworld
注意, fortran的数组默认起始下标是1, 不是0
可以修改数组的起始下标
integer:: arr(5), matrix(0:5,4:5), i, j
数组切片
使用下标三元组, 默认情况为数组自身的上下限, stride=1 default
array ([lower]:[upper][:stride], ...)
program arraySubsection
real, dimension(10) :: a, b
integer:: i, asize, bsize
a(1:7) = 5.0 ! a(1) to a(7) assigned 5.0
a(8:) = 0.0 ! rest are 0.0
b(2:10:2) = 3.9
b(1:9:2) = 2.5
!display
asize = size(a)
bsize = size(b)
do i = 1, asize
Print *, a(i)
end do
do i = 1, bsize
Print *, b(i)
end do
end program arraySubsection
数组内部函数
用于科学计算
函数 | 描述 |
dot_product(vector_a, vector_b) | 函数返回两个输入向量,它必须具有相同长度的标量积。 |
matmul (matrix_a, matrix_b) | 它返回两个矩阵的矩阵乘积,它必须是一致的,即具有相似大小 (m, k) 和 (k, n) |
函数 | 描述 |
all(mask, dim) | 它返回一个逻辑值,指明掩码的所有关系是 .true。以及只有所需的维度,如果第二个参数是给定的。 |
any(mask, dim) | 它返回一个逻辑值,指明掩码的任何关系是.true。以及只有所需的维度,如果第二个参数是给定的。 |
count(mask, dim) | 它返回一个数字值,该值为掩码为 .true 关系的数目。以及所需的维数,如果第二个参数给出。 |
maxval(array, dim, mask) | 它返回 的数组的数组中最大的值,那些遵守于第三个参数掩码的关系,如果一个给定的,以及具有只有所需的维数,如果第二个参数 dim给出的。 |
minval(array, dim, mask) | 它返回数组的数组中那些遵守于第三个参数掩码的关系的最小值,如果一个给定的,以及具有仅在第二个参数 dim 给出所期望的维度。 |
product(array, dim, mask) | 它返回该产品遵守于第三个参数掩码的关系,如果一个给定的,以及具有只有所需的维数,如果第二个参数 dim 给出的所有数组的数组中的元素,。 |
sum (array, dim, mask) | 它返回 遵守于第三个参数掩码关系的总和,如果给定以及具有只有所需的维数,如果第二个参数 dim给出的所有数组的数组中的元素。 |
函数 | 描述 |
allocated(array) | 它是一个逻辑功能,它指示该阵列被分配。 |
lbound(array, dim) | 它返回的数组的维数较低的限制。如果dim(尺寸)不给出一个参数,会得到一个整数向量,如果dim计算在内,得到的整数值正好具有较低维数的限制。 |
shape(source) | 它返回一个阵列源为一个整数向量的形状。 |
size(array, dim) | 它返回在数组元素的数目。如果dim没有给出,并在相关维数的元素个数,如果dim也包括在内。 |
ubound(array, dim) | 它返回尺寸的限制。 |
函数 | 描述 |
merge(tsource, fsource, mask) | 该功能连接两个阵列。它给出了tsource及元素,如果mask条件是.true。如果掩码的条件是.false。这两个字段tsource 和fsource 必须是相同的类型并具有相同的形状。其结果也就是这种类型和形状。还掩码必须具有相同的形状。 |
pack(array, mask, vector) | 它包一个阵列,以使用掩码的控制向量。逻辑阵列掩模的形状,具有以符合一个用于阵列,要不然掩码必须是一个标量。如果载体被包括在内,它必须是秩1与至少一样多的元素是在掩码为真,并且具有相同的类型的数组的数组(即一个向量)。如果掩码的值为.true。然后矢量代替必须的元件阵列的数量相同。 |
spread(source, dim, ncopies) | 它返回相同类型作为参数源与秩增加一个阵列。参数dim 和ncopies都是整数。如果ncopies是负则用零值来代替。如果source是一个标量,然后扩散变得所有具有相同值 ncopies 元素的向量。参数dim 指示哪个索引将被延长。它必须是范围为1和1+(源级)中,如果 source 是一个标量,dim 必须是1。参数 ncopies 是在新的尺寸元素的数量。 |
unpack(vector, mask, array) | 它散射一个载体,掩码下的控制阵列。逻辑阵列掩模的形状具有以符合一个用于数组。阵列载体必须具有等级1(即它是一个向量)与至少一样多的元素是那些掩码内值都为true,并且还必须具有相同类型阵列。如果阵列被给定为一个标量,然后它被认为是使用相同形状的掩码,并在同一标量元素无处不在的阵列。其结果将是具有相同形状的掩码和类型相同的矢量阵列。该值将是那些从所接受的载体,而在阵列的剩余位置的旧值被保留。 |
函数 | 描述 |
reshape(source, shape, pad, order) | 它构造一个特定形状的形状,从一个给定source阵列中的元素开始的数组。如果垫不包含则soure的尺寸必须至少为产物(形状)。如果pad包括在内,它必须具有相同的类型的soure。如果order被包括,它必须使用相同的形状的形状的整数数组,值必须是一个排列(1,2,3,…,n),其中n是在形状要素的数量,它必须小于或等于7。 |
函数 | 描述 |
cshift(array, shift, dim) | 它执行循环移位由移位置的左边,如果移位是正和到右侧,如果它是负的。如果阵列是一个矢量移位正在做以自然的方式中,如果它是一个较高级的阵列则移是沿着维数dim的所有部分。若dim缺少它被认为是1,在其它情况下它必须是1和n(其中n等于阵列的等级)之间的标量整数。该参数换档是一个标量整数或秩n-1个整数的数组和形状相同的阵列中,除沿维数dim(在较低级的,因为它被移除)。不同的部分,因此可以转移在各个方向上,并与各种数目的位置。 |
eoshift(array, shift, boundary, dim) | 这是端关闭的转变。它执行向左移动,如果移位是正和到右侧,如果它是负的。相反的元素移出新元素均取自边界。如果阵列是一个矢量移位正在做以自然的方式中,如果它是一个较高级的阵列,在所有各节中的移位是以及该维度暗淡。若 dim 丢失,它被认为是1,但在其它情况下,它为1和n(其中n等于阵列的秩)之间有一个标量的整数值。该参数换档是一个标量整数,如果阵列具有秩1,在其他情况下,它可以是一个标量整数或秩n-1和形状相同的阵列排列的与除沿维数dim 的整数数组(其被取出因为较低级的)。 |
transpose (matrix) | 其转置矩阵,这是秩2的阵列它取代了的行和列矩阵。 |
函数 | 描述 |
maxloc(array, mask) | 它返回数组中的最大元素的位置上,如果掩码仅包含那些其中满足条件的掩码,则返回位置,其结果是一个整数向量。 |
minloc(array, mask) | 它返回数组的数组中的最小元素的位置,如果掩码仅包含那些其中满足条件的掩码,则返回位置,其结果是一个整数向量。 |
动态数组
实际上就好C++ 中使用malloc动态申请内存一样
但不是变长数组
real, dimension (:,:), allocatable :: darray
allocate ( darray(s1,s2) )
deallocate (darray)
数组初始化
data初始化
data variable / list / ...
program dataStatement
implicit none
integer :: a(5), b(3,3), c(10),i, j
data a /7,8,9,10,11/
data b(1,:) /1,1,1/
data b(2,:)/2,2,2/
data b(3,:)/3,3,3/
data (c(i),i=1,10,2) /4,5,6,7,8/
data (c(i),i=2,10,2)/5*2/
Print *, 'The A array:'
do j = 1, 5
print*, a(j)
end do
Print *, 'The B array:'
do i = lbound(b,1), ubound(b,1)
write(*,*) (b(i,j), j = lbound(b,2), ubound(b,2))
end do
Print *, 'The C array:'
do j = 1, 10
print*, c(j)
end do
end program dataStatement
The A array:
7
8
9
10
11
The B array:
1 1 1
2 2 2
3 3 3
The C array:
4
2
5
2
6
2
7
2
8
2
结构体
语法
type type_name
declarations
end type
定义
type Books
character(len=50) :: title
character(len=50) :: author
character(len=150) :: subject
integer :: book_id
end type Books
创建
type(Books) :: book1
访问
book1%title = "C Programming"
book1%author = "Nuha Ali"
book1%subject = "C Programming Tutorial"
book1%book_id = 6495407
结构体数组
创建
type(Books), dimension(2) :: list
访问
list(1)%title = "C Programming"
list(1)%author = "Nuha Ali"
list(1)%subject = "C Programming Tutorial"
list(1)%book_id = 6495407
指针
声明
integer, pointer :: p1 ! pointer to integer
real, pointer, dimension (:) :: pra ! pointer to 1-dim real array
real, pointer, dimension (:,:) :: pra2 ! pointer to 2-dim real array
简单的指针malloc分配空间
program pointerExample
implicit none
integer, pointer :: p1
allocate(p1)
p1 = 1
Print *, p1
p1 = p1 + 4
Print *, p1
end program pointerExample
指针指向变量:
program pointerExample
implicit none
integer, pointer :: p1
integer, target :: t1
p1=>t1
p1 = 1
Print *, p1
Print *, t1
p1 = p1 + 4
Print *, p1
Print *, t1
t1 = 8
Print *, p1
Print *, t1
end program pointerExample
1
1
5
5
8
8
基本输入输出
自由格式简单I/O
read(*,*) item1, item2, item3...
print *, item1, item2, item3
write(*,*) item1, item2, item3...
格式化IO
read fmt, variable_list
print fmt, variable_list
write fmt, variable_list
格式化标准
描述符 | 描述 | 示例 |
I | 这是用于整数输出。此采用的形式为“rIw.m’,其中 r, w 和m 的含义在下面的表格中给出。真正的值在它们字段右侧适应。如果字段宽度不足以容纳一个整数则用星号代替。 | print “(3i5)”, i, j, k |
F | 这是用于实数输出。此采用的形式为“rFw.d’,其中r, w 和 d 的含义在下面的表格中给出。真正的值在它们字段右侧适应。 如果字段宽度不足够大以容纳所述实数则字段用星号表示。 | print “(f12.3)”,pi |
E | 这是用于指数形式实时输出。在“E”描述语句的形式为’rEw.d’,其中r,w和d的含义如下表中给出。真正的值在它们字段右侧适应. 如果字段宽度不足够大以容纳所述实数则字段用星号表示。请注意,打印出与三位小数,实数至少10需要一个字段宽度。一个用于尾数,2为零,4为尾数部分和两个用于指数本身的符号。在一般情况下,w≥ d +7。 | print “(e10.3)”,123456.0 gives ‘0.123e+06’ |
ES | 这是用于实时输出(科学计数法)。此采用的形式为“rESw.d’,其中 r, w 和 d的含义在下面的表格中给出。上述的“E”描述从传统的众所周知的“科学表示法”略有不同。科学表示法具有尾数范围为1.0至10.0对E描述符,它具有在范围0.1到1.0的尾数不同。真实的值在字段的右侧。如果字段宽度不足够大以容纳所述实数则字段用星号表示。这里,字段宽度必须满足 w ≥ d +7 | print “(es10.3)”,123456.0 gives ‘1.235e+05’ |
A | 这是用于字符输出。 此采用的形式为“rAw”,其中r和w的含义在下面的表格中给出。字符类型是在它们的字段右侧。如果字段宽度不足于以容纳该字符串则字段的第一个“w”字符的字符串。 | print “(a10)”, str |
X | 这是用于空间输出。这需要形式’nX’,其中“n”是所需的空间数量。 | print “(5x, a10)”, str |
/ | 斜杠描述 - 用于插入空行。这需要的形式’/’,并强制下一个数据输出为一个新行。 | print “(/,5x, a10)”, str |
符号 | 描述 |
c | 列数 |
d | 右侧的小数位数为真正的输入或输出 |
m | 要显示的最小位数 |
n | 跳过的空格数 |
r | 重复次数 - 使用描述或组描述符的次数 |
w | 字段宽度- 字符数用于输入或输出 |
常用格式化方法:
指定浮点输出位数
program printPi
pi = 3.141592653589793238
Print "(f6.3)", pi
Print "(f10.7)", pi
Print "(f20.15)", pi
Print "(e16.4)", pi/100
end program printPi
3.142
3.1415927
3.141592741012573
0.3142E-01
留空x格
program printName
implicit none
character (len=15) :: first_name
print *,' Enter your first name.'
print *,' Up to 20 characters, please'
read *,first_name
print "(10x,a)",first_name
end program printName
Enter your first name.
Up to 20 characters, please
WDNMD
WDNMD
数字格式化
program formattedPrint
implicit none
real :: c = 1.2786456e-9, d = 0.1234567e3
integer :: n = 300789, k = 45, i = 2
character (len=15) :: str="Tutorials Point"
print "(i6)", k
print "(i6.3)", k
print "(3i10)", n, k, i
print "(i10,i3,i5)", n, k, i
print "(a15)",str
print "(f12.3)", d
print "(e12.4)", c
print '(/,3x,"n = ",i6, 3x, "d = ",f7.4)', n, d
end program formattedPrint
45
045
300789 45 2
300789 45 2
Tutorials Point
123.457
0.1279E-08
n = 300789 d = *******
文件输入输出:
打开 & 关闭文件
open (list-of-specifiers)
修辞符 | 描述 |
[UNIT=] u | 设备号说明, 必须是>=0的正整数, 就相当于文件标识符 |
IOSTAT= ios | 它是在I/O状态标识符和应为整数的变量。如果打开的语句是成功,则返回IOS值为零,否则为一个非零值。 |
ERR = err | 它是一个标签到该控制跳以防有错误。 |
FILE = fname | 文件名,一个字符串。 |
STATUS = sta | 它示出了该文件的先前状态。一个字符串,可以有三个值NEW, OLD 或 SCRATCH。一个临时文件被创建和删除,当关闭或程序结束。 |
ACCESS = acc | 文件的访问模式, APPEND追加模式, SEQUENTIAL顺序访问, DIRECT直接访问 默认值是SEQUENTIAL。 |
FORM= frm | 它给该文件的格式的状态。可以有FORMATTED 或UNFORMATTED两个值。默认值是UNFORMATTED |
RECL = rl | 它指定的每个记录中的一个直接访问文件的长度。 |
close ([UNIT=]u[,IOSTAT=ios,ERR=err,STATUS=sta])
demo
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i=1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file='data1.dat', status='new')
do i=1,100
write(1,*) x(i), y(i)
end do
close(1)
end program outputdata
读写文件
read ([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)
write([UNIT=]u, [FMT=]fmt, IOSTAT=ios, ERR=err, END=s)
实际使用方式和之前的print 差不多
demo
program outputdata
implicit none
real, dimension(100) :: x, y
real, dimension(100) :: p, q
integer :: i
! data
do i=1,100
x(i) = i * 0.1
y(i) = sin(x(i)) * (1-cos(x(i)/3.0))
end do
! output data into a file
open(1, file='data1.dat', status='new')
do i=1,100
write(1,*) x(i), y(i)
end do
close(1)
! opening the file for reading
open (2, file='data1.dat', status='old')
do i=1,100
read(2,*) p(i), q(i)
end do
close(2)
do i=1,100
write(*,*) p(i), q(i)
end do
end program outputdata
函数 & 子程序
函数
标准语法
这样要使用返回值的话需要用 dummy argument
function name(arg1, arg2, ....)
[declarations, including those for the arguments]
[executable statements]
end function [name]
指定返回值的变量名, 代替dummy argument
function name(arg1, arg2, ....) result (return_var_name)
[declarations, including those for the arguments]
[executable statements]
end function [name]
demo
注意, 这里主程序里没有implicit none
program calling_func
real :: a
a = area_of_circle(2.0)
Print *, "The area of a circle with radius 2.0 is"
Print *, a
end program calling_func
! this function computes the area of a circle with radius r
function area_of_circle (r) result(argv)
! function result
implicit none
! dummy arguments
real :: argv
! local variables
real :: r
real :: pi
pi = 4 * atan (1.0)
argv = pi * r**2
end function area_of_circle
子程序
与function的几个不同
- 子程序没有返回值, 但是可以修改参数
即function中的参数都是形参, 除非是指针传递, 否则无法修改外部变量的值, 而子程序可以直接修改 - 需要使用call调用子程序
subroutine name(arg1, arg2, ....)
[declarations, including those for the arguments]
[executable statements]
end subroutine [name]
program calling_func
implicit none
real :: a, b
a = 2.0
b = 3.0
Print *, "Before calling swap"
Print *, "a = ", a
Print *, "b = ", b
call swap(a, b)
Print *, "After calling swap"
Print *, "a = ", a
Print *, "b = ", b
end program calling_func
subroutine swap(x, y)
implicit none
real :: x, y, temp
temp = x
x = y
y = temp
end subroutine swap
模块
其实就是包package
module name
[statement declarations]
[contains [subroutine and function definitions] ]
end module [name]
在一个文件中调用一个模块 (就是include / import)
use name
use 模块之后就和 include / import 的效果基本相同
module constants
implicit none
real, parameter,private :: pi = 3.1415926536
real, parameter, private :: e = 2.7182818285
contains
subroutine show_consts()
print*, "Pi = ", pi
print*, "e = ", e
end subroutine show_consts
end module constants
program module_example
use constants
implicit none
real :: x, ePowerx, area, radius
x = 2.0
radius = 7.0
ePowerx = e ** x
area = pi * radius**2
call show_consts()
print*, "e raised to the power of 2.0 = ", ePowerx
print*, "Area of a circle with radius 7.0 = ", area
end program module_example
访问控制
模块中的变量可以设置为private, 之后在模块之外就无法被访问, 就像类的private成员
内部函数 (库函数)
数值函数
Function | 描述 |
ABS (A) | 返回A的绝对值 |
AIMAG (Z) | 返回复数Z的虚部 |
AINT (A [, KIND]) | 截断Z小数部分接近零,返回一个实数。 |
ANINT (A [, KIND]) | 返回一个实数值,最接近的整数或整数。 |
CEILING (A [, KIND]) | 返回比最小整数大于或等于数A. |
CMPLX (X [, Y, KIND]) | 其转换实数变量X和Y的一些复数X + iY; 如果Y不存在,则使用0。 |
CONJG (Z) | 返回复数Z的复共轭 |
DBLE (A) | 转换A成到双精度实数。 |
DIM (X, Y) | 返回X和Y的正差 |
DPROD (X, Y) | 返回实数 X 和 Y 产生的双精度 |
FLOOR (A [, KIND]) | 提供了比最大的整数小于或等于数A. |
INT (A [, KIND]) | 将其转换为数字(真实或整数)为整数,截断向零的实部。 |
MAX (A1, A2 [, A3,…]) | 返回的参数的最大值,相同类型 |
MIN (A1, A2 [, A3,…]) | 返回的参数的最小值,相同类型 |
MOD (A, P) | 返回用P除以A余数部分,这两个参数类型相同 (A-INT(A/P)*P) |
MODULO (A, P) | 返回一个模P:(A-FLOOR(A/P)*P) |
NINT (A [, KIND]) | 返回一个最接近整数A的数 |
REAL (A [, KIND]) | 将其转换为实数类型 |
SIGN (A, B) | 返回一个乘以P. 符号的绝对值基本上它转移B的标志为A. |
数学函数
函数 | 描述 |
ACOS (X) | 返回该反余弦在范围(0,π),以弧度的形式。 |
ASIN (X) | 返回该反正弦在范围(-π/ 2,π/ 2),单位为弧度。 |
ATAN (X) | 返回反正切的范围(-π/ 2,π/ 2),单位为弧度。 |
ATAN2 (Y, X) | 返回反正切的范围(-π,π),以弧度表示。 |
COS (X) | 返回参数的弧度的余弦值。 |
COSH (X) | 返回参数的弧度的双曲余弦值。 |
EXP (X) | 返回X的指数值 |
LOG (X) | 返回X的自然对数值 |
LOG10 (X) | 返回常用对数(10为基数)X的值 |
SIN (X) | 返回参数的弧度的正弦值。 |
SINH (X) | 返回参数的弧度双曲正弦。 |
SQRT (X) | 返回X的平方根 |
TAN (X) | 返回参数的弧度的切线。 |
TANH (X) | 返回参数弧度的双曲正切值。 |
数字查询函数
函数 | 描述 |
DIGITS (X) | 返回显著模型的位数。 |
EPSILON (X) | 返回相比一个是几乎可以忽略不计的数目。换句话说,它返回最小值,使得REAL( 1.0, KIND(X)) + EPSILON(X)为不等于REAL( 1.0, KIND(X))。 |
HUGE (X) | 返回模型最多数量 |
MAXEXPONENT (X) | 返回该模型的最大指数 |
MINEXPONENT (X) | 返回该模型的最小指数 |
PRECISION (X) | 返回小数精度 |
RADIX (X) | 返回该模型的基数 |
RANGE (X) | 返回十进制指数范围 |
TINY (X) | 返回该模型的最小正数 |
浮点操作函数
函数 | 描述 |
EXPONENT (X) | 返回一个模型数的指数部分 |
FRACTION (X) | 返回一个数的小数部分 |
NEAREST (X, S) | 返回给定的方向最近的不同处理器编号 |
RRSPACING (X) | 返回型号的邻近给定数量的相对间隔的倒数 |
SCALE (X, I) | 乘以一个实数由基数的整数次幂 |
SET_EXPONENT (X, I) | 返回一个数的指数部分 |
SPACING (X) | 返回型号的绝对间隔接近指定数值 |
位操作函数
函数 | 描述 |
BIT_SIZE (I) | 返回该模型的比特数 |
BTEST (I, POS) | 位测试 |
IAND (I, J) | 逻辑与 |
IBCLR (I, POS) | 清除位 |
IBITS (I, POS, LEN) | 位提取 |
IBSET (I, POS) | 设置位 |
IEOR (I, J) | 异或 |
IOR (I, J) | 包括或 |
ISHFT (I, SHIFT) | 逻辑移位 |
ISHFTC (I, SHIFT [, SIZE]) | 循环移位 |
NOT (I) | 逻辑补 |
字符函数
函数 | 描述 |
ACHAR (I) | 它返回ASCII整理序列中的第i个字符。 |
ADJUSTL (STRING) | 它通过调节删除任何前导空格和插入尾随空白留下的字符串 |
ADJUSTR (STRING) | 它去除右尾随空白和插入前导空格调整字符串。 |
CHAR (I [, KIND]) | 它返回特定机器整理序列中的第i个字符 |
IACHAR © | 它返回字符的ASCII码排序序列中的位置。 |
ICHAR © | 它返回字符在机器(处理器)特定排序序列中的位置。 |
INDEX (STRING, SUBSTRING [, BACK]) | 它返回SUBSTRING内STRING最左边(最右边如果返回.TRUE。)起始位置。 |
LEN (STRING) | 它返回字符串的长度。 |
LEN_TRIM (STRING) | 它返回一个字符串的长度没有结尾的空白字符。 |
LGE (STRING_A, STRING_B) | 词汇上大于或等于 |
LGT (STRING_A, STRING_B) | 词汇上大于 |
LLE (STRING_A, STRING_B) | 词汇上大于或等于以下 |
LLT (STRING_A, STRING_B) | 词汇上小于 |
REPEAT (STRING, NCOPIES) | 重复并置 |
SCAN (STRING, SET [, BACK]) | 它返回STRING属于集,或者0,如果都不属于最左边(最右边如果返回.TRUE。)字符的索引。 |
TRIM (STRING) | 删除结尾的空白字符 |
VERIFY (STRING, SET [, BACK]) | 验证字符集的字符串 |
类型函数
函数 | 描述 |
KIND (X) | 它返回种类类型的参数值。 |
SELECTED_INT_KIND ® | 它返回一种为特定网络版的指数范围类型的参数。 |
SELECTED_REAL_KIND ([P, R]) | 实数类型的参数值,指定精度和范围 |
逻辑函数
Function | 描述 |
LOGICAL (L [, KIND]) | 逻辑型的不同种类型参数对象之间转换 |