Funções Intrínsecas
O Fortran traz diversas funções nativas para o uso em aritmética, trigonometria, transformação de tipos e outras.
As funções intrínsecas (ou de biblioteca) listadas na Tabela 1 são as mais comumente usadas nos programas quotidianos. Uma lista mais completa pode ser encontrada na documentação do Fortran – FORTRAN 77 Language Reference – Chapter 6 Intrinsic Functions e Fortran 90.
Função | Descrição | Tipo de Argumento | Tipo do do Retorno |
---|---|---|---|
ABS(X) | Valor absoluto de x | INTEGER ou REAL | |
COS(X) | Coseno de x radianos | REAL | REAL |
EXP(X) | Função exponencial | REAL | REAL |
INT(X) | Parte inteira de x | REAL | INTEGER |
FLOOR(X) | Piso de x | REAL | INTEGER |
FRACTION(X) | Mantissa de x | REAL | REAL |
LOG(X) | Logaritmo natural de x | REAL | REAL |
MAX(X1, … , Xn) | Máximo de um conjunto | INTEGER or REAL | O mesmo do argumento |
MIN(X1, … , Xn) | Mínimo de um conjunto | INTEGER or REAL | O mesmo do argumento |
MOD(X, Y) | Resto da divisão inteira de x por y | INTEGER or REAL | O mesmo do argumento |
NINT(X) | Função de arredondamento | REAL | INTEGER |
REAL(X) | Converter valor de z em tipo REAL | INTEGER | REAL |
SIN(X) | Seno de x radianos | REAL | REAL |
SQRT(X) | Raiz quadrada de x | REAL | REAL |
TAN(X) | Tangente de x radianos | REAL | REAL |
Em funções, as variáveis, constantes ou valores que estão entre os parenteses são chamados de argumentos.
Nota: O tipo do retorno da função não é explicito, ou seja o usuário deverá conhecer a documentação da função a fim de identifica-lo para poder fazer atribuições às variáveis de maneira correta.
Funções intrínsecas são algumas funções comuns e importantes que são fornecidos como parte da linguagem Fortran, podem ser classificados como:
- Funções numéricas
- Funções aritméticas
- Funções de consulta numéricos
- Funções para manipulação de ponto flutuante
- Funções Bit Manipulation
- Funções de caracteres
- Funções de categoria (kind)
- Funções lógicas
- Funções para Array
Na coluna nome da função,
- A representa qualquer tipo de variável numérica
- R representa um número inteiro ou variável real
- X e Y representam variáveis reais
- Z representa variável complexa
- W representa variável real ou complexo
Funções numéricas
Função | Descrição da função |
---|---|
abs(A) | Retorna o valor absoluto de um valor A |
aimag(Z) | Retorna a parte imaginária de um número complexo Z |
aint(A [ , Kind ] ) | É trunca parte fracionária de um a zero, retornando um número real, todo. |
anint(A [, Kind ]) | Retorna um valor real, o número inteiro mais próximo ou o número inteiro. |
ceiling(A [, Kind ] ) | Retorna o menor inteiro maior ou igual a número A. |
cmplx(X [, Y, Kind ]) | Converte as variáveis X e Y reais para um número complexo X + iy; se Y está ausente, é usado. |
conjg(Z) | Retorna o complexo conjugado de qualquer Z. número complexo |
dble(A) | Converte A para um número real de precisão dupla. |
dim(X, Y) | Retorna a diferença positiva de X e Y. |
dprod(X, Y) | Retorna o produto real precisão dupla de X e Y. |
floor(A [, Kind ]) | Ele fornece o maior inteiro menor ou igual a número A. |
int(A [, KindA ]) | Converte um número (real ou inteiro) para inteiro, truncando a parte real para zero. |
max(A1, A2 [, A3, … ]) | Retorna o valor máximo dos argumentos, todos os seres da mesma espécie. |
min(A1, A2 [, A3, … ]) | Retorna o valor mínimo dos argumentos, todos os seres da mesma espécie. |
mod(A, P) | Ele retorna o resto de uma sobre a divisão de A por P, ambos os argumentos que são do mesmo tipo (A-INT (A / P) *P) |
modulo(A, P) | Retorna um modulo P: (A-FLOOR (A / P) *P) |
nint(A [, Kind ]) | Retorna o número inteiro mais próximo da série A |
real(A [, Kind ]) | Converte para tipo real |
sign(A, B) | Basicamente ele transfere o sinal de de B para A. |
Exemplo:
program numericFunctions
implicit none
! define constants
! define variables
real :: a, b
complex :: z
! values for a, b
a = 15.2345
b = -20.7689
write(*,*) 'abs(a): ',abs(a),' abs(b): ',abs(b)
write(*,*) 'aint(a): ',aint(a),' aint(b): ',aint(b)
write(*,*) 'ceiling(a): ',ceiling(a),' ceiling(b): ',ceiling(b)
write(*,*) 'floor(a): ',floor(a),' floor(b): ',floor(b)
z = cmplx(a, b)
write(*,*) 'z: ',z
end program numericFunctions
Quando você compilar e executar o programa acima , produz o seguinte resultado:
abs(a): 15.2344999 abs(b): 20.7688999
aint(a): 15.0000000 aint(b): -20.0000000
ceiling(a): 16 ceiling(b): -20
floor(a): 15 floor(b): -21
z: (15.2344999, -20.7688999)
Funções aritméticas
Descrição da função
- ACOS(X) Devolve o co-seno inverso no intervalo (0, π), em radianos.
- ASEN(X) Devolve o seno inversa no intervalo (-π / 2, π / 2), em radianos.
- Atan(X) Devolve a tangente inversa no intervalo (-π / 2, π / 2), em radianos.
- ATAN2(Y, X) Devolve a tangente inversa no intervalo (-π, π), em radianos.
- COS(X) Retorna o co-seno do argumento em radianos.
- COSH(X) Devolve o co-seno hiperbólico do argumento em radianos.
- EXP(X) Retorna o valor exponencial de X.
- LOG(X) Retorna o valor logarítmica natural de X.
- LOG10(X) Devolve o logaritmo comum (base 10) valor de X.
- SIN(X) Retorna o seno do argumento em radianos.
- SINH(X) Devolve o seno hiperbólico do argumento em radianos.
- SQRT(X) Retorna a raiz quadrada de X.
- TAN(X) Retorna a tangente do argumento em radianos.
- TANH(X) Devolve a tangente hiperbólica de argumento em radianos.
Exemplo
O seguinte programa calcula a posição horizontal e vertical x
e y
, respectivamente, de um projétil depois de um tempo, t
:
em que, x = ut cos(a)
e y = ut sen(a) - gt^2 / 2
program projectileMotion
implicit none
! define constants
real, parameter :: g = 9.8
real, parameter :: pi = 3.1415927
!define variables
real :: a, t, u, x, y
!values for a, t, and u
a = 45.0
t = 20.0
u = 10.0
! convert angle to radians
a = a * pi / 180.0
x = u * cos(a) * t
y = u * sin(a) * t - 0.5 * g * t * t
write(*,*) 'x: ',x,' y: ',y
end program projectileMotion
Quando você compilar e executar o programa acima , produzirá o seguinte resultado:
x: 141.421356 y: -1818.57861
Funções de consulta numéricas
Estas funções funcionam com um determinado modelo de inteiro e aritmética de ponto flutuante. As funções de regresso propriedades dos números do mesmo tipo que a variável X, o qual pode ser real e, em alguns casos inteiro.
Descrição da função
- digits(X) Retorna o número de dígitos significativos do modelo.
- epsilon(X) Retorna o número que é quase insignificante em comparação com um. Em outras palavras, ele retorna o menor valor tal que
real(1.0, kind(X)) + epsilon(X)
não é igual areal(1.0, kind(X))
. - huge(X) Devolve o maior número do modelo
- maxexponent(X) Retorna o expoente máximo do modelo
- minexponent(X) Retorna o expoente mínimo do modelo
- precision(X) Retorna a precisão decimal
- radix(X) Volta a base do modelo
- range(X) Retorna o intervalo decimal do expoente
- tiny(X) Retorna o menor número positivo do modelo
Funções para manipulação de ponto flutuante
Descrição da função
- exponent(X) Devolve a parte expoente de um número de modelo
- fraction(X) Devolve a parte fracionária de um número
- nearest(X, S) Devolve o número de processador diferente mais próximo em determinada direção
- rrspacing(X) Devolve o recíproco do espaçamento relativo dos números de modelo perto de determinado número
- scale(X, I) Multiplica um verdadeiro pela sua base a uma potência inteira
- set_exponent(X, I) retorna a parte expoente de um número
- spacing(X) Retorna o espaçamento absoluta de números de modelo perto de determinado número
Funções de manipulação de bits
Descrição da função
- bit_size(I) Retorna o número de bits do modelo
- btest(I, POS) testes Bit
- iand(I, J) E lógico
- ibclr(I, POS) Limpar bit
- ibits(I, POS, LEN) extracção Bit
- ibset(I, POS) Definir bit
- ieor(I, J) OU exclusivo
- ior(I, J) Inclusive OR
- ishft(I, SHIFT) mudança Logical
- ishftc(I, Shift [, size ]) mudança Circular
- not(I) complemento lógico
Funções de caracteres
Descrição da função
- ACHAR(I) Ele retorna o personagem Ith na seqüência de intercalação ASCII.
- ADJUSTL(STRING) Ajusta cadeia deixado pela remoção de quaisquer espaços em branco iniciais e inserção de espaços em branco finais
- ADJUSTR(STRING) Ajusta cadeia direita, removendo espaços em branco finais e inserção de espaços em branco iniciais.
- CHAR(I [, Kind ]) Devolve o personagem Ith na especi fi sequência c agrupamento máquina
- IACHAR(C) Devolve a posição do caractere na seqüência de intercalação ASCII.
- ICHAR(C) Devolve a posição do carácter na máquina (processador) fi cações c seqüência de intercalação.
- INDEX(String, SUBSTRING [, BACK ]) Devolve a posição mais à esquerda (mais à direita se volta é .TRUE.) A partir de SUBSTRING dentro STRING.
- LEN(STRING) Devolve o comprimento de uma string.
- LEN_TRIM(STRING) Devolve o comprimento de uma cadeia sem arrastando caracteres em branco.
- LGE(STRING_A, STRING_B) lexically maior ou igual
- LGT(STRING_A, STRING_B) lexically superior
- LLE(STRING_A, STRING_B) lexically inferior ou igual
- LLT(STRING_A, STRING_B) lexically menos de
- REPEAT(String, nCopies) concatenação repetida
- SCAN(String, SET [, BACK ]) Devolve o índice da mais à esquerda (mais à direita se o argumento
back
for.true.
) Caractere de cadeia que pertencem ao conjunto, ou 0 se nenhum pertence. - TRIM(STRING) remove arrastando caracteres em branco
- verify(String, SET [, BACK ]) Verifica o conjunto de caracteres em uma seqüência
Funções de tipo Kind functions
Descrição da função
- kind(X) Retorna o valor do parâmetro tipo de espécie.
- SELECTED_INT_KIND(R) Ele retorna tipo de parâmetro de tipo para especi fi gama ed expoente.
- SELECTED_REAL_KIND([P, R ]) Valor tipo de parâmetro tipo real, dada a precisão e gama
Função lógica
Descrição da função
- LÓGICO (L [, Kind ]) Converter entre objetos do tipo lógicas com diferentes parâmetros de tipo Kind
Programa de exemplo do use das funções
PROGRAM exemplos_de_funcoes |
REAL :: x, y |
INTEGER :: z |
!———————————————————————– |
! Valor absoluto de x |
! Tipos de argumento(s) : INTEGER or REAL |
! Tipo de retorno : O mesmo do argumento |
print *, ‘Valor absoluto de x’ |
x = -50.58 |
print *,x |
y = ABS(x) |
print *, y |
!———————————————————————– |
! Coseno de x radianos |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAL |
print *, ‘Coseno de x radianos’ |
x = 70 |
print *,x |
y = COS(X) |
print *, y |
!———————————————————————– |
! Função exponencial |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAL |
print *, ‘Função exponencial’ |
x = 2 |
print *,x |
y = EXP(X) ! x é o expoente da constante neperiano |
print *, y |
!———————————————————————– |
! Parte inteira de x |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : INTEGER |
print *, ‘Parte inteira de x’ |
x = 2.718281828 |
print *,x |
z = INT(x) |
print *,z |
!———————————————————————– |
! Piso de x |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : INTEGER |
print *, ‘Piso de x’ |
x = 2.718281828 |
print *,x |
z = FLOOR(x) |
print *,z |
!———————————————————————– |
! Mantissa de x |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAL |
print *, ‘Mantissa de x’ |
x = 2.718281828 |
print *,x |
y = FRACTION(x) |
print *,y |
!———————————————————————– |
! Logaritmo natural de x |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAL |
print *, ‘Logaritmo natural de x’ |
x = 2.718281828 |
print *,x |
y = LOG(x) |
print *,y |
!———————————————————————– |
! Máximo de um conjunto |
! Tipos de argumento(s) : INTEGER or REAL |
! Tipo de retorno : O mesmo do argumento |
print *, ‘Máximo de um conjunto’ |
print *, MAX(x, y) |
! Obs.: tanto para MAX e MIN pode usar apenas um tipo de argumento |
!———————————————————————– |
! Mínimo de um conjunto |
! Tipos de argumento(s) : INTEGER or REAL |
! Tipo de retorno : O mesmo do argumento |
print *, ‘Mínimo de um conjunto’ |
print *, MIN(x, y) |
!———————————————————————– |
! Resto da divisão inteira de x por y |
! Tipos de argumento(s) : INTEGER or REAL |
! Tipo de retorno : O mesmo do argumento |
print *, ‘Resto da divisão inteira de x por y’ |
x = 21 |
print *, x |
y = 8 |
print *, y |
print *, MOD(X,Y) ! Não faz diferença se é maiúsculo ou minúsculo |
!———————————————————————– |
! Função de arredondamento |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : INTEGER |
print *, ‘Função de arredondamento’ |
x = 2.4 ! Tente x = 2.5 |
print *, x |
z = NINT (x) |
print *, z |
!———————————————————————– |
! Converter valor de z em tipo REAL |
! Tipos de argumento(s) : INTEGER |
! Tipo de retorno : REAL |
print *, ‘Converter valor de z em tipo REAL’ |
z = 133 |
print *, z |
x = REAL(z) |
print *,x |
!———————————————————————– |
! Seno de x radianos |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAL |
print *, ‘Seno de x radianos’ |
x = 70 |
print *, x |
y = SIN(x) |
print *, y |
!———————————————————————– |
! Raiz quadrada de x |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : REAl |
print *, ‘Raiz quadrada de x’ |
x = 144 |
print *, x |
y = SQRT (x) |
print *, y |
!———————————————————————– |
! Tangente de x radianos |
! Tipos de argumento(s) : REAL |
! Tipo de retorno : |
print *, ‘Tangente de x radianos’ |
x = 70 |
print *, x |
y = TAN(x) |
print *, y |
!———————————————————————– |
END |
view rawexemplo_de_funcoes.f90 hosted with
by GitHub
IDPFPG-1828