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.