Перейти к основному содержимому

Путеводитель по Java Math Class

· 7 мин. чтения

1. Введение

В этом руководстве мы собираемся описать класс Math , который предоставляет полезные статические методы для выполнения числовых операций, таких как экспонента, логарифм и т. д.

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

Первый набор методов, которые мы рассмотрим, — это основные математические функции, такие как абсолютное значение, квадратный корень, максимум или минимум между двумя значениями.

2.1. абс()

Метод abs() возвращает абсолютное значение заданного значения:

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

Точно так же из других, которые мы увидим далее, abs() принимает в качестве параметра целое, длинное, плавающее или двойное число и возвращает относительное значение.

2.2. пау ()

Вычисляет и возвращает значение первого аргумента, возведенного в степень второго:

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

Мы обсуждаем этот метод более подробно здесь .

2.3. квт()

Возвращает округленный положительный квадратный корень из числа double :

Math.sqrt(25); // returns 5

Если аргумент равен NaN или меньше нуля, результатом будет NaN .

2.4. cbrt()

Точно так же cbrt() возвращает кубический корень из числа double :

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. знак()

Полезно, когда нам нужно знать знак значения:

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

Этот метод возвращает 1,0, если аргумент больше нуля, или -1,0 в противном случае. Если аргумент равен нулю положительному или нулю отрицательному, результат совпадает с аргументом.

Вход может быть числом с плавающей запятой или двойным числом.

2.9. копироватьзнак()

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

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

Аргументы также могут быть плавающими или двойными.

3. Экспоненциальные и логарифмические функции.

В дополнение к основным математическим функциям класс Math содержит методы для решения экспоненциальных и логарифмических функций.

3.1. exp()

Метод exp() получает двойной аргумент и возвращает число Эйлера, возведенное в степень аргумента ( e ^

x

):

Math.exp(1); // returns 2.718281828459045

3.2. выражение1()

Подобно предыдущему методу, expm1() вычисляет число Эйлера, возведенное в степень полученного аргумента, но прибавляет -1 ( e ^

x

-1):

Math.expm1(1); // returns 1.718281828459045

3.3. журнал()

Возвращает натуральный логарифм двойного значения:

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

3.4. лог10()

Он возвращает логарифм аргумента по основанию 10:

Math.log10(10); // returns 1

3.5. log1p()

Аналогично log(), но он добавляет 1 к аргументу ln(1 + x):

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

4. Тригонометрические функции.

Когда нам приходится работать с геометрическими формулами, нам всегда нужны тригонометрические функции; класс Math предоставляет их нам.

4.1. грех()

Получает один двойной аргумент, который представляет угол (в радианах) и возвращает тригонометрический синус:

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

4.2. потому что ()

Таким же образом cos() возвращает тригонометрический косинус угла (в радианах):

Math.cos(0); // returns 1

4.3. загар()

Возвращает тригонометрический тангенс угла (в радианах):

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

4.4. грех(), кош(), танх()

Они возвращают соответственно гиперболический синус, гиперболический косинус и гиперболический тангенс двойного значения:

Math.sinh(Math.PI);

Math.cosh(Math.PI);

Math.tanh(Math.PI);

4.5. как в()

Возвращает арксинус полученного аргумента:

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

Результатом является угол в диапазоне от пи /2 до пи /2.

4.6. acos()

Возвращает арккосинус полученного аргумента:

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

Результатом является угол в диапазоне от 0 до pi .

4.7. загар()

Возвращает арктангенс полученного аргумента:

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

Результатом является угол в диапазоне от пи /2 до пи /2.

4.8. атан2()

Наконец, atan2() получает координату ординаты y и координату абсцисс x и возвращает угол ϑ из преобразования прямоугольных координат (x,y) в полярные координаты (r, ϑ) :

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

4.9. до градусов()

Этот метод полезен, когда нам нужно преобразовать радианы в градусы:

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

4.10. toRadians()

С другой стороны , toRadians() полезен для обратного преобразования:

Math.toRadians(180); // returns pi

Помните, что большинство методов, которые мы видели в этом разделе, принимают аргумент в радианах, поэтому, когда у нас есть угол в градусах, этот метод следует использовать перед использованием тригонометрического метода.

Дополнительные примеры см. здесь.

5. Округление и другие функции

Наконец, давайте посмотрим на методы округления.

5.1. потолок()

ceil() полезен, когда нам нужно округлить целое число до наименьшего двойного значения, которое больше или равно аргументу:

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

В этой статье мы используем этот метод для округления числа до ближайшей сотни.

5.2. пол()

Чтобы округлить число до наибольшего двойного числа , которое меньше или равно аргументу, мы должны использовать floor() :

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

5.3. получитьэкспонент()

Возвращает несмещенный показатель степени аргумента.

Аргумент может быть двойным или числом с плавающей запятой :

Math.getExponent(333.3); // returns 8

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

5.4. IEEEостаток()

Вычисляет деление между первым (делимое) и вторым (делителем) аргументом и возвращает остаток в соответствии со стандартом IEEE 754 :

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

5.5. следующийПосле()

Этот метод полезен, когда нам нужно узнать соседнее значение типа double или float :

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

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

Он принимает два аргумента, первый — это значение, из которого вы хотите узнать соседнее число, а второй — направление.

5.6. следующий()

Аналогично предыдущему методу, но этот возвращает соседнее значение только в направлении положительной бесконечности:

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

5.7. распечатать()

Возвращает двойное число, которое является ближайшим целочисленным значением аргумента:

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

5.8. круглый()

Аналогично предыдущему методу, но этот возвращает значение int , если аргумент является числом с плавающей запятой , и длинное значение, если аргумент является двойным:

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

long result2 = Math.round(1.95) // returns 2

5.9. скальп()

Scalb — это аббревиатура от «бинарная шкала». Эта функция выполняет один сдвиг, одно преобразование и двойное умножение:

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

5.10. ульп()

Метод ulp() возвращает расстояние от числа до его ближайших соседей:

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. гипот()

Возвращает квадратный корень из суммы квадратов своего аргумента:

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

Метод вычисляет квадратный корень без промежуточного переполнения или потери значимости.

В этой статье мы используем этот метод для расчета расстояния между двумя точками.

6. Математические функции Java 8

Класс Math был пересмотрен в Java 8, чтобы включить новые методы для выполнения наиболее распространенных арифметических операций.

Мы обсуждали эти методы в другой статье.

7. Поля констант

В дополнение к методам, класс Math объявляет два константных поля:

public static final double E

public static final double PI

Которые указывают на более близкое значение к основанию натуральных логарифмов и более близкое значение к пи соответственно.

8. Заключение

В этой статье мы описали API, которые Java предоставляет для математических операций.

Как обычно, все фрагменты кода, представленные здесь, доступны на GitHub.