Ръководство за Java Math Class

1. Въведение

В този урок ще опишем класа Math, който предоставя полезни статични методи за извършване на числови операции като експоненциален, логаритъм и т.н.

2. Основни математически функции

Първият набор от методи, които ще обхванем, са основните математически функции като абсолютна стойност, квадратен корен, максимум или минимум между две стойности.

2.1. коремни мускули()

Методът abs () връща абсолютната стойност на дадена стойност:

Math.abs(-5); // returns 5

По същия начин, от други, които ще видим по-нататък, abs () приема като параметър int, long, float или double и връща относителния.

2.2. пуд ()

Изчислява и връща стойността на първия аргумент, повдигнат в степента на втория:

Math.pow(5,2); // returns 25

Ние обсъждаме този метод по-подробно тук.

2.3. sqrt ()

Връща закръгления положителен квадратен корен на двойно :

Math.sqrt(25); // returns 5

Ако аргументът е NaN или по-малък от нула, резултатът е NaN.

2.4. cbrt ()

По подобен начин cbrt () връща корена на куб на двойно :

Math.cbrt(125); // returns 5

2.5. макс ()

Както подсказва името на метода, той връща максимума между две стойности:

Math.max(5,10); // returns 10

Тук отново методът приема int, long, float или double .

2.6. мин ()

По същия начин min () връща минимума между две стойности:

Math.min(5,10); // returns 5

2.7. произволен ()

Връща псевдослучайно двойно по-голямо или равно на 0,0 и по-малко от 1,0:

double random = Math.random()

За целта методът създава единичен екземпляр на генератор на числа java.util.Random (), когато е извикан за първи път.

След това за всички извиквания към този метод се използва един и същ екземпляр. Имайте предвид, че методът е синхронизиран, като по този начин може да се използва от повече от една нишка.

В тази статия можем да намерим още примери за това как да генерираме произволно.

2.8. signum ()

Полезно е, когато трябва да знаем знака на стойността:

Math.signum(-5) // returns -1

Този метод връща 1.0, ако аргументът е по-голям от нула или -1.0 в противен случай. Ако аргументът е нула положителна или нула отрицателна, резултатът е същият като аргумента.

Входът може да бъде плаващ или двоен.

2.9. copySign ()

Приема два параметъра и връща първия аргумент със знака на втория аргумент:

Math.copySign(5,-1); // returns -5

Аргументите също могат да бъдат плаващи или двойни.

3. Експоненциални и логаритмични функции

В допълнение към основните математически функции, по математика клас съдържа методи за решаване на експоненциални и логаритмични функции.

3.1. опит ()

Методът exp () получава двоен аргумент и връща числото на Ойлер, повишено в степента на аргумента ( ex ):

Math.exp(1); // returns 2.718281828459045

3.2. expm1 ()

Similar to the above method, expm1() computes the Euler's number raised to the power of the argument received, but it adds -1 (ex -1):

Math.expm1(1); // returns 1.718281828459045

3.3. log()

Returns the natural logarithm of a double value:

Math.log(Math.E); // returns 1

3.4. log10()

It returns the logarithm in base 10 of the argument:

Math.log10(10); // returns 1

3.5. log1p()

Likewise the log(), but it adds 1 to the argument ln(1 + x):

Math.log1p(Math.E); // returns 1.3132616875182228

4. Trigonometric Functions

When we have to work with geometric formulas, we always need trigonometric functions; the Math class provides these for us.

4.1. sin()

Receives a single, double argument that represents an angle (in radians) and returns the trigonometric sine:

Math.sin(Math.PI/2); // returns 1

4.2. cos()

In the same way, cos() returns the trigonometric cosine of an angle (in radians):

Math.cos(0); // returns 1

4.3. tan()

Returns the trigonometric tangent of an angle (in radians):

Math.tan(Math.PI/4); // returns 1

4.4. sinh(), cosh(), tanh()

They return respectively the hyperbolic sine, hyperbolic cosine and hyperbolic tangent of a double value:

Math.sinh(Math.PI); Math.cosh(Math.PI); Math.tanh(Math.PI);

4.5. asin()

Returns the arc sine of the argument received:

Math.asin(1); // returns pi/2

The result is an angle in the range –pi/2 to pi/2.

4.6. acos()

Returns the arc cosine of the argument received:

Math.acos(0); // returns pi/2

The result is an angle in the range 0 to pi.

4.7. atan()

Returns the arc tangent of the argument received:

Math.atan(1); // returns pi/4

The result is an angle in the range –pi/2 to pi/2.

4.8. atan2()

Finally, atan2() receives the ordinate coordinate y and the abscissa coordinate x, and returns the angle ϑ from the conversion of rectangular coordinates (x,y) to polar coordinates (r, ϑ):

Math.atan2(1,1); // returns pi/4

4.9. toDegrees()

This method is useful when we need to convert radians to degrees:

Math.toDegrees(Math.PI); // returns 180

4.10. toRadians()

On the other hand toRadians() is useful to do the opposite conversion:

Math.toRadians(180); // returns pi

Remember that most of the methods we have seen in this section accept the argument in radians, thus, when we have an angle in degrees, this method should be used before using a trigonometric method.

For more examples, have a look in here.

5. Rounding and Other Functions

Finally, let's have a look at rounding methods.

5.1. ceil()

ceil() is helpful when we have to round an integer to the smallest double value that is greater than or equal to the argument:

Math.ceil(Math.PI); // returns 4

In this article, we use this method to round up a number to the nearest hundred.

5.2. floor()

To round a number to the largest double that is less than or equal to the argument we should use floor():

Math.floor(Math.PI); // returns 3

5.3. getExponent()

Returns an unbiased exponent of the argument.

The argument can be a double or a float:

Math.getExponent(333.3); // returns 8 Math.getExponent(222.2f); // returns 7

5.4. IEEEreminder()

Computes the division between the first (dividend) and the second (divisor) argument and returns the remainder as prescribed by the IEEE 754 standard:

Math.IEEEremainder(5,2); // returns 1

5.5. nextAfter()

This method is useful when we need to know the neighboring of a double or a float value:

Math.nextAfter(1.95f,1); // returns 1.9499999 Math.nextAfter(1.95f,2); // returns 1.9500002

It accepts two arguments, the first is the value of which you want to know the adjacent number and the second is the direction.

5.6. nextUp()

Likewise the previous method, but this one returns the adjacent value only in the direction of a positive infinity:

Math.nextUp(1.95f); // returns 1.9500002

5.7. rint()

Returns a double that is the closest integer value of the argument:

Math.rint(1.95f); // returns 2.0

5.8. round()

Equally to the above method, but this one returns an int value if the argument is a float and a long value if the argument is a double:

int result = Math.round(1.95f); // returns 2 long result2 = Math.round(1.95) // returns 2

5.9. scalb()

Scalb is an abbreviation for a “scale binary”. This function executes one shift, one conversion and a double multiplication:

Math.scalb(3, 4); // returns 3*2^4

5.10. ulp()

The ulp() method returns the distance from a number to its nearest neighbors:

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()

Returns the square root of the sum of squares of its argument:

Math.hypot(4, 3); // returns 5

The method calculates the square root without intermediate overflow or underflow.

In this article, we use this method to calculate the distance between two points.

6. Java 8 Math Functions

The Math class has been revisited in Java 8 to include new methods to perform the most common arithmetic operations.

We discussed these methods in another article.

7. Constants Fields

In addition to the methods, Math class declares two constant fields:

public static final double E public static final double PI

Which indicate the closer value to the base of the natural logarithms, and the closer value to pi, respectively.

8. Conclusion

In this article, we've described the APIs that Java provides for mathematical operations.

Както обикновено, всички кодови фрагменти, представени тук, са достъпни в GitHub.