FORTRAN 函數列表(轉)
來源: 王德立的日誌
符號約定:
l I代表整型;R代表實型;C代表復型;CH代表字符型;S代表字符串;L代表邏輯型;A代表數組;P代表指針;T代表派生類型;AT爲任意類型。
l s:P表示s類型爲P類型(任意kind值)。s:P(k)表示s類型爲P類型(kind值=k)。
l […]表示可選參數。
l *表示常用函數。
表1 數值和類型轉換函數
函數名 |
說明 |
ABS(x)* |
求x的絕對值∣x∣。x:I、R, 結果類型同x; x:C, 結果:R |
AIMAG(x) |
求x的虛部。x:C, 結果:R |
AINT(x[,kind])* |
對x取整,並轉換爲實數(kind)。x:R, kind:I, 結果:R(kind) |
AMAX0(x1,x2,x3,…)* |
求x1,x2,x3,…中最大值。xI:I, 結果:R |
AMIN0(x1,x2,x3,…)* |
求x1,x2,x3,…中最小值。xI:I, 結果:R |
ANINT(x[,kind])* |
對x四捨五入取整,並轉換爲實數(kind)。x:R, kind:I, 結果:R(kind) |
CEILING(x)* |
求大於等於x的最小整數。x:R, 結果:I |
CMPLX(x[,y][,kind])) |
將參數轉換爲x、(x,0.0)或(x,y)。x:I、R、C, y:I、R,kind:I, 結果:C(kind) |
CONJG(x) |
求x的共軛複數。x:C, 結果:C |
DBLE(x)* |
將x轉換爲雙精度實數。x:I、R、C, 結果:R(8) |
DCMPLX(x[,y]) |
將參數轉換爲x、(x,0.0)或(x,y)。x:I、R、C, y:I、R, 結果:C(8) |
DFLOAT(x) |
將x轉換爲雙精度實數。x:I, 結果:R(8) |
DIM(x,y)* |
求x-y和0中最大值, 即MAX(x-y,0)。x:I、R, y的類型同x,結果類型同x |
DPROD(x,y) |
求x和y的乘積,並轉換爲雙精度實數。x:R, y:R, 結果:R(8) |
FLOAT(x)* |
將x轉換爲單精度實數。x:I, 結果:R |
FLOOR(x)* |
求小於等於x的最大整數。x:R, 結果:I |
IFIX(x)* |
將x轉換爲整數(取整)。x:R, 結果:I |
IMAG(x) |
同AIMAG(x) |
INT(x[,kind])* |
將x轉換爲整數(取整)。x:I、R、C, kind:I, 結果:I(kind) |
LOGICAL(x[,kind])* |
按kind值轉換新邏輯值。x:L, 結果:L(kind) |
MAX(x1,x2,x3,…)* |
求x1,x2,x3,…中最大值。xI爲任意類型, 結果類型同xI |
MAX1(x1,x2,x3,…)* |
求x1,x2,x3,…中最大值(取整)。xI:R, 結果:I |
MIN(x1,x2,x3,…)* |
求x1,x2,x3,…中最小值。xI爲任意類型, 結果類型同xI |
MIN1(x1,x2,x3,…)* |
求x1,x2,x3…中最小值(取整)。xI:R, 結果:I |
MOD(x,y)* |
求x/y的餘數,值爲x-INT(x/y)*y。x:I、R, y的類型同x, 結果類型同x |
MODULO(x,y) |
求x/y餘數,值爲x-FLOOR(x/y)*y。x:I、R, y的類型同x, 結果類型同x |
NINT(x[,kind])* |
將x轉換爲整數(四捨五入)。x:R, kind:I, 結果:I(kind) |
REAL(x[,kind])* |
將x轉換爲實數。x:I、R、C, kind:I, 結果:R(kind) |
SIGN(x,y)* |
求x的絕對值乘以y的符號。x:I、R, y的類型同x, 結果類型同x |
SNGL(x) |
將雙精度實數轉換爲單精度實數。x:R(8), 結果:R |
ZEXT(x) |
用0向左側擴展x。x:I、L, 結果:I |
表2 三角函數
函數名 |
說明 |
ACOS(x)* |
求x的反餘弦arccos(x)。x:R,結果類型同x,結果值域:0~π |
ACOSD(x)* |
求x的反餘弦arccos(x)。x:R,結果類型同x,結果值域:0~180° |
ASIN(x)* |
求x的反正弦arcsin(x)。x:R,結果類型同x,結果爲弧度,值域:0~π |
ASIND(x)* |
求x的反正弦arcsin(x)。x:R,結果類型同x,結果爲度,值域:0~180° |
ATAN(x)* |
求x的反正切arctg(x)。x:R,結果類型同x,結果爲弧度,值域:-π/2~π/2 |
ATAND(x)* |
求x的反正切arctg(x)。x:R,結果類型同x,結果爲度,值域:-90~90° |
ATAN2(y,x) |
求x的反正切arctg(y/x)。y:R,x和結果類型同x,結果值域:-π~π |
ATAN2D(y,x) |
求x的反正切arctg(y/x)。y:R,x和結果類型同x,結果值域:-180~180° |
COS(x)* |
求x的餘弦cos(x)。x:R、C,x取值弧度,結果類型同x |
COSD(x)* |
求x的餘弦cos(x)。x:R,x取值度,結果類型同x |
COSH(x) |
求x的雙曲餘弦ch(x)。x:R,結果類型同x |
COTAN(x)* |
求x的餘切ctg(x)。x:R,x取值度,結果類型同x |
SIN(x)* |
求x的正弦sin(x)。x:R、C,x取值弧度,結果類型同x |
SIND(x)* |
求x的正弦sin(x)。x:R,x取值度,結果類型同x |
SINH(x) |
求x的雙曲正弦sh(x)。x:R,結果類型同x |
TAN(x)* |
求x的正切tg(x)。x:R,x取值弧度,結果類型同x |
TAND(x)* |
求x的正切tg(x)。x:R,x取值度,結果類型同x |
TANH(x) |
求x的雙曲正切th(x)。x:R,結果類型同x |
注:三角函數名前有C、D的函數爲複數、雙精度型函數。
表3 指數、平方根和對數函數
函數名 |
說明 |
ALOG(x) |
求x的自然對數ln(x)。x:R(4),結果:R(4) |
ALOG10(x) |
求x以10爲底一般對數log10(x)。x:R(4),結果:R(4) |
EXP(x)* |
求指數,即ex。x:R、C,結果類型同x |
LOG(x)* |
求自然對數,即ex。x:R、C,結果類型同x |
LOG10(x)* |
求以10爲底對數,即。x:R,結果類型同x |
SQRT(x)* |
求x的平方根。x:R、C,結果類型同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) |
查詢x的機內編碼數值部分二進制位數(除符號位和指數位)。x:I、R,結果:I |
EPSILON(x)* |
查詢x類型可表示的最小正實數。x:R,結果類型同x。最小正實數:1.1920929E-07 |
HUGE(x)* |
查詢x類型可表示的最大數。x:I、R,結果類型同x |
ILEN(x) |
查詢x的反碼值。x:I,結果類型同x |
KIND(x)* |
查詢x的kind參數值。x:I、R、C、CH、L,結果:I |
MAXEXPONENT(x)* |
查詢x的最大正指數值。x:R,結果:I(4) |
MINEXPONENT(x)* |
查詢x的最大負指數值。x:R,結果:I(4) |
PRECISION(x)* |
查詢x類型有效數字位數。x:R、C,結果:I(4) |
PRESENT(x) |
查詢可選形參x是否有對應實參。x:AT,結果:L。有:.TRUE.,沒有:.FALSE. |
RADIX(x) |
查詢x類型的基數。x:I、R,結果:L |
RANGE(x)* |
查詢x類型的指數範圍。x:I、R、C,結果:I(4) |
SIZEOF(x)* |
查詢x的存儲分配字節數。x:AT,結果:I(4) |
TINY(x)* |
查詢x的最小正值。x:R,結果類型同x |
表5 實數檢測和控制函數
函數名 |
說明 |
EXPONENT(x)* |
求實數x機內編碼表示的指數值。x:R,結果:I |
FRACTION(x)* |
求實數x機內編碼表示的小數值。x:R,結果類型同x |
NEAREST(x,s) |
根據s的正負號求最接近x的值。x:R,結果:R,且不爲0 |
RRSPACING(x) |
求x與系統最大數之間的差值。x:R,結果類型同x |
SCALE(x,I)* |
求x乘以2i。x:R,i:I,結果類型同x |
SET_EXPONENT(x,i) |
求由x的機內編碼小數值與指數i組成的實數。x:R,i:I,結果類型同x |
SPACING(x)* |
求x與x最近值的差值絕對值。x:R,結果類型同x |
表6 字符處理函數
函數名 |
說明 |
ACHAR(n) |
將ASCII碼n轉換爲對應字符。n:I,n值域:0~127,結果:CH(1) |
ADJUSTL(string)* |
將字符串string左對齊,即去掉左端空格。string:CH(*),結果類型同string |
ADJUSTR(string)* |
將字符串string右對齊,即去掉右端空格。string:CH(*),結果類型同string |
CHAR(n)* |
將ASCII碼n轉換爲對應字符。n:I,n值域:0~255,結果:CH(1) |
IACHAR(c)* |
將字符c轉換爲對應的ASCII碼。c:CH(1),結果:I |
ICHAR(c)* |
將字符c轉換爲對應的ASCII碼。c:CH(1),結果:I |
INDEX(s,ss[,b])* |
求子串ss在串s中起始位置。s:CH(*),ss:CH(*),b:L,結果:I。b爲真從右起 |
LEN(s)* |
求字符串s的長度。s:CH(*),結果:I |
LEN_TRIM(s)* |
求字符串s去掉尾部空格後的字符數。s:CH(*),結果:I |
LGE(s1,s2)* |
按ASCII碼值判定字符串s1大於等於字符串s2。s1:CH(*),s1:CH(*),結果:L |
LGT(s1,s2)* |
按ASCII碼值判定字符串s1大於字符串s2。s1:CH(*),s1:CH(*),結果:L |
LLE(s1,s2)* |
按ASCII碼值判定字符串s1小於等於字符串s2。s1:CH(*),s1:CH(*),結果:L |
LLT(s1,s2)* |
按ASCII碼值判定字符串s1小於字符串s2。s1:CH(*),s1:CH(*),結果:L |
REPEAT(s,n)* |
求字符串s重複n次的新字符串。s:CH(*),n:I,結果:CH(*) |
SCAN(s,st[,b]) |
求串st中任一字符在串s中的位置。s:CH(*),ss:CH(*),b:L,結果:I |
TRIM(s)* |
求字符串s去掉首尾部空格後的字符數。s:CH(*),結果:CH(*) |
VERIFY(s,st[,b]) |
求不在串st中字符在s中位置。s:CH(*),ss:CH(*),b:L,結果:I。b爲真右起 |
表7 二進制位操作函數
函數名 |
說明 |
BIT_SIZE(n)* |
求n類型整數的最大二進制位數。n:I,結果類型同n |
BTEST(n,p) |
判定整數n的二進制表示右起第p位是否爲1。n:I,p:+I,p值域:0~64結果:L |
IAND(m,n)* |
對m和n進行按位邏輯“與”運算。m:I,n:I,結果類型同m |
IBCHNG(n,p) |
將整數n二進制表示右起第p位值取反。n:I,p:+I,p值域:0~64結果類型同n |
IBCLR(n,p) |
將整數n二進制表示右起第p位置0。n:I,p:+I,p值域:0~64結果類型同n |
IBITS(i,p,l) |
從整數n二進制表示右起第p位開始取l位。n:I,p:+I,l:+I,結果類型同n |
IBSET(n,p) |
將整數n二進制表示右起第p位置1。n:I,p:+I,p值域:0~64結果類型同n |
IEOR(m,n)* |
對m和n進行按位邏輯“異或”運算。m:I,n:I,結果類型同m |
IOR(m,n)* |
對m和n進行按位邏輯“或”運算。m:I,n:I,結果類型同m |
ISHA(n,s)* |
對n向左(s爲正)或向右(s爲負)移動s位(算術移位)。n:I,s:I,結果類型同n |
ISHC(n,s)* |
對n向左(s爲正)或向右(s爲負)移動s位(循環移位)。n:I,s:I,結果類型同n |
ISHFT(n,s)* |
對n向左(s爲正)或向右(s爲負)移動s位(邏輯移位)。n:I,s:I,結果類型同n |
ISHFTC(n,s[,size]) |
對n最右邊size位向左(s爲正)或向右(s爲負)移動s位(循環移位) |
ISHL(n,s) |
對n向左(s爲正)或向右(s爲負)移動s位(邏輯移位)。n:I,s:I,結果類型同n |
NOT(n)* |
對n進行按位邏輯“非”運算。n:I,結果類型同n |
表8 數組運算、查詢和處理函數
函數名 |
說明 |
ALL(m[,d])* |
判定邏輯數組m各元素是否都爲“真”。m;L-A,d:I,結果:L(缺省d)或L-A(d=維) |
ALLOCATED(a)* |
判定動態數組a是否分配存儲空間。a:A,結果:L。分配:.TRUE.,未分配.FALSE. |
ANY(m[,d])* |
判定邏輯數組m是否有一元素爲“真”。m;L-A,d:I,結果:L(缺省d)或L-A(d=維) |
COUNT(m[,d])* |
計算邏輯數組m爲“真”元素個數。m;L-A,d:I,結果:I(缺省d)或I-A(d=維) |
CSHIFT(a,s[,d])* |
將數組a元素按行(d=1或缺省)或按列(d=2)且向左(d>0)或向右循環移動s次 |
EOSHIFT(a,s[,b][,d]) |
將數組a元素按行(d=1或缺省)或按列(d=2)且向左(d>0)或向右循環移動s次 |
LBOUND(a[,d])* |
求數組a某維d的下界。a;A,d:I,結果:I(d=1或缺省)或A(d=2) |
MATMUL(ma,mb)* |
對二維數組(矩陣)ma和mb做乘積運算。ma:A,mb:A,結果:A |
MAXLOC(a[,m])* |
求數組a中對應掩碼m爲“真”最大元素下標值。a:A,m:L-A,結果:A,大小=維數 |
MAXVAL(a[,d][,m])* |
求數組a中對應掩碼m爲“真”元素最大值。a:A,d:I,m:L-A,結果:A,大小=維數 |
MERGE(ts,fs,m) |
將數組ts和fs按對應m掩碼數組元素合併,掩碼爲“真”取ts值,否則取fs值 |
MINLOC(a[,m])* |
求數組a中對應掩碼m爲“真”最小元素下標值。a:A,m:L-A,結果:A,大小=維數 |
MINVAL(a[,d][,m])* |
求數組a中對應掩碼m爲“真”元素最小值。a:A,d:I,m:L-A,結果:A,大小=維數 |
PACK(a,m[,v]) |
將數組a中對應m掩碼數組元素爲“真”元素組成一維數組並與一維數組v合併 |
PRODUCT(a[,d][,m]) |
數組a中對應掩碼m爲“真”元素乘積。a:A,d:I,m:L-A,結果:A,大小=維數 |
RESHAPE(a,s)* |
將數組a的形按數組s定義的形轉換。數組形指數組維數、行數、列數、… |
SHAPE(a) |
求數組a的形。a:A,結果:A(一維) |
SIZE(a[,d])* |
求數組a的元素個數。a:A,d:I,結果:I |
SPREAD(a,d,n) |
以某維d擴展數組a的元素n次。a:A,d:I,n:I,結果:A |
SUM(a[,d][,m])* |
數組a中對應掩碼m爲“真”元素之和。a:A,d:I,m:L-A,結果:A,大小=維數 |
TRANSPOSE(a).* |
對數組a進行轉置。a:A,結果:A |
LBOUND(a[,d])* |
求數組a某維d的上界。a;A,d:I,結果:I(d=1或缺省)或A(d=2) |
UNPACK(a,m,f) |
將一維數組a、掩碼數組m值和f值組合生成新數組。a;A,m:L-A,f:同a,結果:A |
注: 參數m指邏輯型掩碼數組,指明允許操作的數組元素。缺省掩碼數組指對數組所有元素進行操作