fortran基本函数

温柔似野鬼°
617次浏览
2021年01月03日 19:34
最佳经验
本文由作者推荐

新中国成立的意义-观沧海曹操

2021年1月3日发(作者:尹希古)


FORTRAN 90标准函数(一)

(2012-07-03 17:14:57)

转载
fortran

函数

教育


标签: 分类: 学习
符号约定:


I代表整型;R代表实型;C代表复型;CH代表字符型;S代表字符串;L代 表逻辑型;A代
表数组;P代表指针;T代表派生类型;AT为任意类型。


s:P表示s类型为P类型(任意kind值)。s:P(k)表示s类型为P类型(kind值=k)。


[…]表示可选参数。


*表示常用函数。


表1 数值和类型转换函数

函数名
ABS(x)*
AIMAG(x)
AINT(x[,kind])*
AMAX0(x
1
,x
2
,x
3
,…)*
AMIN0(x
1
,x
2
,x
3
,…)*
ANINT(x[,kind])*
CEILING(x)*
CMPLX(x[,y][,kind]))
CONJG(x)
DBLE(x)*
DCMPLX(x[,y])
DFLOAT(x)
DIM(x,y)*
DPROD(x,y)
FLOAT(x)*
FLOOR(x)*
IFIX(x)*
IMAG(x)
INT(x[,kind])*
LOGICAL(x[,kind])*
MAX(x
1
,x
2
,x
3
,…)*
MAX1(x
1
,x
2
,x
3
,…)*
MIN(x
1
,x
2
,x
3
,…)*
说明
求x的绝对值∣x∣。x:I、R, 结果类型同x; x:C, 结果:R
求x的实部。x:C, 结果:R
对x取整,并转换为实数(kind)。x:R, kind:I, 结果:R(kind)
求x
1
,x
2
,x
3
,…中最大值。x
I
:I, 结果:R
求x
1
,x< br>2
,x
3
,…中最小值。x
I
:I, 结果:R
对x四舍五入取整,并转换为实数(kind)。x:R, kind:I, 结果:R(kind)
求大于等于x的最小整数。x:R, 结果:I
将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I, 结果:C(kind)
求x的共轭复数。x:C, 结果:C
将x转换为双精度实数。x:I、R、C, 结果:R(8)
将参数转换为x、(x,0.0)或(x,y)。x:I、R、C, y:I、R, 结果:C(8)
将x转换为双精度实数。x:I, 结果:R(8)
求x-y和0中最大值, 即MAX(x-y,0)。x:I、R, y的类型同x,结果类型同x
求x和y的乘积,并转换为双精度实数。x:R, y:R, 结果:R(8)
将x转换为单精度实数。x:I, 结果:R
求小于等于x的最大整数。x:R, 结果:I
将x转换为整数(取整)。x:R, 结果:I
同AIMAG(x)
将x转换为整数(取整)。x:I、R、C, kind:I, 结果:I(kind)
按kind值转换新逻辑值。x:L, 结果:L(kind)
求x
1
,x
2
,x
3
,…中最大值。x
I
为任意类型, 结果类型同x
I

求x
1
,x
2
,x
3< br>,…中最大值(取整)。x
I
:R, 结果:I
求x
1
,x
2
,x
3
,…中最小值。x
I
为任意类型, 结果类型同x
I


MIN1(x
1
,x
2< br>,x
3
,…)*
MOD(x,y)*
MODULO(x,y)
NINT(x[,kind])*
REAL(x[,kind])*
SIGN(x,y)*
SNGL(x)
ZEXT(x)
求x
1
,x
2
,x
3
…中最小值(取整)。x
I
:R, 结果:I
求xy的余数,值为x-INT(xy)*y。x:I、R, y的类型同x, 结果类型同x
求xy余数,值为x-FLOOR(xy)*y。x:I、R, y的类型同x, 结果类型同x
将x转换为整数(四舍五入)。x:R, kind:I, 结果:I(kind)
将x转换为实数。x:I、R、C, kind:I, 结果:R(kind)
求x的绝对值乘以y的符号。x:I、R, y的类型同x, 结果类型同x
将双精度实数转换为单精度实数。x:R(8), 结果:R
用0向左侧扩展x。x:I、L, 结果:I


说明
表2 三角函数

函数名
ACOS(x)*
ACOSD(x)*
ASIN(x)*
ASIND(x)*
ATAN(x)*
ATAND(x)*
ATAN2(y,x)
ATAN2D(y,x)
COS(x)*
COSD(x)*
COSH(x)
COTAN(x)*
SIN(x)*
SIND(x)*
SINH(x)
TAN(x)*
TAND(x)*
TANH(x)
求x的反余弦arccos(x)。x:R,结果类型同x,结果值域:0~π
求x的反余弦arccos(x)。x:R,结果类型同x,结果值域:0~180°
求x的反正弦arcsin(x)。x:R,结果类型同x,结果为弧度,值域:0~π
求x的反正弦arcsin(x)。x:R,结果类型同x,结果为度,值域:0~180°
求x的反正切arctg(x)。x:R,结果类型同x,结果为弧度,值域:-π2~π2
求x的反正切arctg(x)。x:R,结果类型同x,结果为度,值域:-90~90°
求x的反正切arctg(y
x
)。y:R,x和结果类型同x,结果值域:-π~π
求x的反正切arctg(y
x
)。y:R,x和结果类型同x,结果值域:-180 ~180°
求x的余弦cos(x)。x:R、C,x取值弧度,结果类型同x
求x的余弦cos(x)。x:R,x取值度,结果类型同x
求x的双曲余弦ch(x)。x:R,结果类型同x
求x的余切ctg(x)。x:R,x取值度,结果类型同x
求x的正弦sin(x)。x:R、C,x取值弧度,结果类型同x
求x的正弦sin(x)。x:R,x取值度,结果类型同x
求x的双曲正弦sh(x)。x:R,结果类型同x
求x的正切tg(x)。x:R,x取值弧度,结果类型同x
求x的正切tg(x)。x:R,x取值度,结果类型同x
求x的双曲正切th(x)。x:R,结果类型同x


注:三角函数名前有C、D的函数为复数、双精度型函数。



表3 指数、平方根和对数函数

函数名
ALOG(x)
ALOG10(x)
EXP(x)*
LOG(x)*
LOG10(x)*
SQRT(x)*
说明
求x的自然对数ln(x)。x:R(4),结果:R(4)
求x以10为底一般对数log
10
(x)。x:R(4),结果:R(4)
求指数,即e。x:R、C,结果类型同x
求自然对数,即e。x:R、C,结果类型同x
求以10为底对数,即。x:R,结果类型同x
求x的平方根。x:R、C,结果类型同x
x
x
注:指数函数名、平方根函数名、对数函数名前有C、D的函数为复数、双精度型 函数。

表4 参数查询函数


函数名
ALLOCATED(a)*
说明
判定动态数组a是否分配内存。a:A,结果:L,分配:.TRUE.,未分配:.FALSE.
ASSOCIATED(p[,t])* 判定指针p是否指向目标t。p:P,t:AT,结果:L,指向:.TRUE.,未指向:.FALSE.
DIGITS(x)
EPSILON(x)*
HUGE(x)*
ILEN(x)
KIND(x)*
MAXEXPONENT(x)*
MINEXPONENT(x)*
PRECISION(x)*
PRESENT(x)
RADIX(x)
RANGE(x)*
SIZEOF(x)*
TINY(x)*


表5 实数检测和控制函数

函数名
EXPONENT(x)*
FRACTION(x)*
NEAREST(x,s)
RRSPACING(x)
SCALE(x,I)*
SET_EXPONENT(x,i)
SPACING(x)*


说明
求实数x机内编码表示的指数值。x:R,结果:I
求实数x机内编码表示的小数值。x:R,结果类型同x
根据s的正负号求最接近x的值。x:R,结果:R,且不为0
求x与系统最大数之间的差值。x:R,结果类型同x
求x乘以2。x:R,i:I,结果类型同x
求由x的机内编码小数值与指数i组成的实数。x:R,i:I,结果类型同x
求x与x最近值的差值绝对值。x:R,结果类型同x
i
查询x的机内编码数值部分二进制位数(除符号位和指数位)。x:I、R,结果:I
查询x类型可表示的最小正实数。x:R,结果类型同x。最小正实数:1.1920929E-07
查询x类型可表示的最大数。x:I、R,结果类型同x
查询x的反码值。x:I,结果类型同x
查询x的kind参数值。x:I、R、C、CH、L,结果:I
查询x的最大正指数值。x:R,结果:I(4)
查询x的最大负指数值。x:R,结果:I(4)
查询x类型有效数字位数。x:R、C,结果:I(4)
查询可选形参x是否有对应实参。x:AT,结果:L。有:.TRUE.,没有:.FALSE.
查询x类型的基数。x:I、R,结果:L
查询x类型的指数范围。x:I、R、C,结果:I(4)
查询x的存储分配字节数。x:AT,结果:I(4)
查询x的最小正值。x:R,结果类型同x
















atan2函数的值域是多少?我从网上找到一个fortran函数的日志 ,说此值域是-π~π,但正常
反正切函数的值域应该是-π2~π2。对atan2函数不够了解,所 以不知道你的答案对不对,
我个人认为不对。我是用正常的反正切函数atan(vu)来算的:
FORTRAN:
if (u>0..and.v>0.) dir=270-atan(vu)*180pi
if (u<0..and.v>0.) dir=90-atan(vu)*180pi
if (u<0..and.v<0.) dir=90-atan(vu)*180pi
if (u>0..and.v<0.) dir=270-atan(vu)*180pi
if (u==0..and.v>0.) dir=180
if (u==0..and.v<0.) dir=0
if (u>0..and.v==0.) dir=270
if (u<0..and.v==0.) dir=90
if (u==0..and.v==0.) dir=999
其中uv等于 零的五种情况要单独挑出来,不然程序会有瑕疵。atan函数换成atand函数的
话直接是度数,不 用*180pi
我四个象限和轴都试了,应该没错。
最需要注意的问题,一个是函数值域, 另一个是uv矢量方向和风向是反着的,并且风向角
度数是从正Y轴开始顺时针算,和三角函数里度数从 正X轴开始逆时针算不一样。

服装厂实习日记-感恩父母的诗


送老师的鲜花-friendship作文


俯瞰的拼音-情人节快乐歌词


小芳李春波-感恩父母的作文结尾


月满西楼歌曲-想告诉你


巧克力工厂-元宵灯会


我不是潘金莲电影-家规


富字-中考满分作文精选