Um guia para a classe Java Math
1. Introdução
Neste tutorial, vamos descrever a classeMath que fornece métodos estáticos úteis para realizar operações numéricas como exponencial, logaritmo, etc.
2. Funções matemáticas básicas
O primeiro conjunto de métodos que cobriremos são as funções matemáticas básicas, como o valor absoluto, a raiz quadrada, o máximo ou o mínimo entre dois valores.
2.1. abs()
O métodoabs() retorna o valor absoluto de um determinado valor:
Math.abs(-5); // returns 5
Da mesma forma, de outros que veremos a seguir,abs() aceita como parâmetro umint, long, float oudoublee retorna o relativo.
2.2. pow()
Calcula e retorna o valor do primeiro argumento elevado à potência do segundo:
Math.pow(5,2); // returns 25
Discutimos esse método com mais detalhes emhere.
2.3. sqrt()
Retorna a raiz quadrada positiva arredondada de adouble:
Math.sqrt(25); // returns 5
2.4. cbrt()
Da mesma forma,cbrt() retorna a raiz cúbica de umdouble:
Math.cbrt(125); // returns 5
2.5. max()
Como o nome do método sugere, ele retorna o máximo entre dois valores:
Math.max(5,10); // returns 10
Aqui, novamente, o método aceitaint, long, float oudouble.
2.6. min()
Da mesma forma,min() retorna o mínimo entre dois valores:
Math.min(5,10); // returns 5
2.7. random()
Retorna um pseudo-aleatoriamentedouble maior ou igual a 0,0 e menor que 1,0:
double random = Math.random()
Para fazer isso,the method creates a single instance of java.util.Random() number generator when it is called for the first time.
Depois disso, para todas as chamadas para esse método, a mesma instância é usada. Observe que, o método é sincronizado, portanto, pode ser usado por mais de um thread.
Podemos encontrar mais exemplos de como gerar um aleatório emthis article.
2.8. signum()
É útil quando precisamos saber o sinal do valor:
Math.signum(-5) // returns -1
Este método retornará 1.0 se o argumento for maior que zero ou -1.0 caso contrário. Se o argumento for zero positivo ou zero negativo, o resultado será o mesmo que o argumento.
A entrada pode ser umfloat ou umdouble.
2.9. copySign()
Aceita dois parâmetros e retorna o primeiro argumento com o sinal do segundo argumento:
Math.copySign(5,-1); // returns -5
Os argumentos também podem serfloat oudouble.
3. Funções Exponenciais e Logarítmicas
Além das funções matemáticas básicas,the Math class contains methods to solve exponential and logarithmic functions.
3.1. exp()
O métodoexp() recebe um argumentodouble e retorna o número de Euler elevado à potência do argumento (ex
):
Math.exp(1); // returns 2.718281828459045
3.2. expm1()
Semelhante ao método acima,expm1() calcula o número de Euler elevado à potência do argumento recebido, mas adiciona -1 (ex
-1):
Math.expm1(1); // returns 1.718281828459045
3.3. log()
Retorna o logaritmo natural de um valordouble:
Math.log(Math.E); // returns 1
3.4. log10()
Retorna o logaritmo na base 10 do argumento:
Math.log10(10); // returns 1
3.5. log1p()
Da mesma forma, olog(), , mas adiciona 1 ao argumento ln (1 + x):
Math.log1p(Math.E); // returns 1.3132616875182228
4. Funções trigonométricas
Quando temos que trabalhar com fórmulas geométricas, sempre precisamos de funções trigonométricas; a classeMath fornece isso para nós.
4.1. sin()
Recebe um único argumentodouble que representa um ângulo (em radianos) e retorna o seno trigonométrico:
Math.sin(Math.PI/2); // returns 1
4.2. cos()
Da mesma forma,cos() retorna o cosseno trigonométrico de um ângulo (em radianos):
Math.cos(0); // returns 1
4.3. tan()
Retorna a tangente trigonométrica de um ângulo (em radianos):
Math.tan(Math.PI/4); // returns 1
4.4. sinh(), cosh(), tanh()
Eles retornam respectivamente o seno hiperbólico, o cosseno hiperbólico e a tangente hiperbólica de um valordouble:
Math.sinh(Math.PI);
Math.cosh(Math.PI);
Math.tanh(Math.PI);
4.5. como em()
Retorna o arco seno do argumento recebido:
Math.asin(1); // returns pi/2
O resultado é um ângulo no intervalo -pi / 2 api / 2.
4.6. acos()
Retorna o arco cosseno do argumento recebido:
Math.acos(0); // returns pi/2
O resultado é um ângulo no intervalo de 0 api.
4.7. atan()
Retorna a tangente do arco do argumento recebido:
Math.atan(1); // returns pi/4
O resultado é um ângulo no intervalo -pi / 2 api / 2.
4.8. atan2()
Finalmente,atan2() recebe a coordenada de ordenaday e a coordenada de abscissax, e retorna o ânguloϑ da conversão de coordenadas retangulares(x,y) em coordenadas polares(r, ϑ):
Math.atan2(1,1); // returns pi/4
4.9. toDegrees()
Este método é útil quando precisamos converter radianos em graus:
Math.toDegrees(Math.PI); // returns 180
4.10. toRadians()
Por outro lado,toRadians() é útil para fazer a conversão oposta:
Math.toRadians(180); // returns pi
Lembre-se de que a maioria dos métodos que vimos nesta seção aceita o argumento em radianos; portanto, quando temos um ângulo em graus, esse método deve ser usado antes de usar um método trigonométrico.
Para mais exemplos, dê uma olhada emhere.
5. Arredondamento e outras funções
Finalmente, vamos dar uma olhada nos métodos de arredondamento.
5.1. ceil()
ceil() é útil quando temos que arredondar um número inteiro para o menor valordouble que é maior ou igual ao argumento:
Math.ceil(Math.PI); // returns 4
5.2. floor()
Para arredondar um número para o maiordouble que seja menor ou igual ao argumento, devemos usarfloor():
Math.floor(Math.PI); // returns 3
5.3. getExponent()
Retorna um expoente imparcial do argumento.
O argumento pode ser umdouble ou umfloat:
Math.getExponent(333.3); // returns 8
Math.getExponent(222.2f); // returns 7
5.4. IEEEreminder()
Calcula a divisão entre o primeiro (dividendo) e o segundo (divisor) argumento e retorna o restante conforme prescrito peloIEEE 754 standard:
Math.IEEEremainder(5,2); // returns 1
5.5. nextAfter()
Este método é útil quando precisamos saber a vizinhança de um valordouble oufloat:
Math.nextAfter(1.95f,1); // returns 1.9499999
Math.nextAfter(1.95f,2); // returns 1.9500002
Ele aceita dois argumentos, o primeiro é o valor do qual você deseja saber o número adjacente e o segundo é a direção.
5.6. nextUp()
Da mesma forma que o método anterior, mas este retorna o valor adjacente apenas na direção de um infinito positivo:
Math.nextUp(1.95f); // returns 1.9500002
5.7. rint()
Retorna umdouble that é o valor inteiro mais próximo do argumento:
Math.rint(1.95f); // returns 2.0
5.8. round()
Igualmente ao método acima, mas este retorna um valorint se o argumento for umfloat e um valorlong se o argumento for umdouble:
int result = Math.round(1.95f); // returns 2
long result2 = Math.round(1.95) // returns 2
5.9. scalb()
Scalb é uma abreviação de "scale binary". Esta função executa um turno, uma conversão e uma dupla multiplicação:
Math.scalb(3, 4); // returns 3*2^4
5.10. ulp()
O métodoulp() retorna a distância de um número até seus vizinhos mais próximos:
Math.ulp(1); // returns 1.1920929E-7
Math.ulp(2); // returns 2.3841858E-7
Math.ulp(4); // returns 4.7683716E-7
Math.ulp(8); // returns 9.536743E-7
5.11. hypot()
Retorna a raiz quadrada da soma dos quadrados de seu argumento:
Math.hypot(4, 3); // returns 5
O método calcula a raiz quadrada sem estouros ou estouros intermediários.
Emthis article, usamos este método para calcular a distância entre dois pontos.
6. Java 8 Math Functions
O sclassMath foi revisitado no Java 8 para incluir novos métodos para realizar as operações aritméticas mais comuns.
Discutimos esses métodosin another article.
7. Campos de Constantes
Além dos métodos,Math class declara dois campos constantes:
public static final double E
public static final double PI
Que indicam o valor mais próximo da base dos logaritmos naturais, e o valor mais próximo depi, respectivamente.
8. Conclusão
Neste artigo, descrevemos as APIs que o Java fornece para operações matemáticas.
Como de costume, todos os trechos de código apresentados aqui estão disponíveisover on GitHub.