Um guia para a classe Java Math

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

Se o argumento forNaN ou menor que zero, o resultado seráNaN.

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

Emthisarticle, usamos este método para arredondar um número para a centena mais próxima.

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.