W3docs

Класс Java Math

Выполняйте математические операции в Java с помощью Math.abs, Math.sqrt, Math.pow, Math.random и других статических методов.

Класс java.lang.Math — это набор статических методов для математических операций, выходящих за рамки базовых +, -, *, /, % операторов. Абсолютные значения, степени, корни, тригонометрия, логарифмы, округление и случайные числа — всё это здесь. Поскольку Math входит в пакет java.lang, он импортируется неявно — вам не нужно писать инструкцию import, можно сразу вызывать методы напрямую: Math.sqrt(2).

На этой странице рассматривается каждая группа методов, показываются точные возвращаемые значения и описываются подводные камни (какие методы возвращают double, а какие long, почему тригонометрия работает в радианах и когда Math не подходит). Все методы являются static, поэтому они вызываются на самом классе, а не на экземпляре.

Абсолютное значение, min, max

Math.abs(-7);          // 7
Math.abs(-3.14);       // 3.14

Math.min(3, 5);        // 3
Math.max(3, 5);        // 5
Math.min(1.5, 1.7);    // 1.5

Все четыре метода перегружены для типов int, long, float и double.

Степени и корни

Math.pow(2, 10);       // 1024.0  — always returns double
Math.sqrt(2);          // 1.4142135623730951
Math.cbrt(27);         // 3.0
Math.exp(1);           // 2.718281828... — e^x

Для целочисленных показателей степени Math.pow избыточен — цикл или оператор << работают быстрее.

Логарифмы

Math.log(Math.E);      // 1.0  — natural log (ln)
Math.log10(1000);      // 3.0  — base-10 log
Math.log(8) / Math.log(2);   // 3.0 — log base 2

В Java нет встроенного метода «логарифм по основанию N», поэтому он вычисляется по формуле смены основания: Math.log(x) / Math.log(base). Для повышенной точности вблизи x = 1 используйте Math.log1p(x), который вычисляет ln(1 + x), и Math.expm1(x), который вычисляет e^x - 1 без потери значимых цифр.

Округление

МетодПоведение
Math.floor(x)округление вниз (к -∞), возвращает double
Math.ceil(x)округление вверх (к +∞), возвращает double
Math.round(x)округление к ближайшему, при равноудалённости — вверх; возвращает long для double, int для float
Math.rint(x)округление к ближайшему, при равноудалённости — к чётному; возвращает double
Math.floor(2.7);       // 2.0
Math.ceil(2.1);        // 3.0
Math.round(2.5);       // 3   — ties round up
Math.round(-2.5);      // -2  — toward positive infinity
Math.rint(0.5);        // 0.0 — banker's rounding
Math.rint(1.5);        // 2.0

Для округления с учётом десятичных знаков (например, до двух знаков для денежных значений) используйте BigDecimal с RoundingMode.

Тригонометрия

Все тригонометрические функции работают в радианах. Для преобразования используйте Math.toRadians / Math.toDegrees:

Math.sin(Math.PI / 2);          // 1.0
Math.cos(0);                    // 1.0
Math.tan(Math.PI / 4);          // 0.999999... (≈ 1)

Math.toRadians(180);            // Math.PI
Math.toDegrees(Math.PI);        // 180.0

Math.atan2(1, 1);               // π/4  — handles quadrant correctly

Math.atan2(y, x) — правильный инструмент для определения угла вектора, а не Math.atan(y/x).

Константы

Math.PI;       // 3.141592653589793
Math.E;        // 2.718281828459045

Случайные числа

Math.random() возвращает значение типа double равномерно распределённое в диапазоне [0.0, 1.0):

double r = Math.random();          // 0.0 ≤ r < 1.0
int dieRoll = 1 + (int)(Math.random() * 6);  // 1..6

Для более сложных задач (с заданным зерном, воспроизводимых, с диапазонами, гауссовых) используйте java.util.Random или java.util.concurrent.ThreadLocalRandom:

import java.util.Random;
Random rng = new Random(42);   // seeded, reproducible
int n = rng.nextInt(100);      // 0..99
double g = rng.nextGaussian(); // normal distribution

Для криптографических токенов не используйте Math.random или Random — применяйте java.security.SecureRandom.

Арифметика с проверкой переполнения

Методы Math.addExact, subtractExact, multiplyExact, negateExact, incrementExact, decrementExact выбрасывают ArithmeticException при целочисленном переполнении:

Math.addExact(Integer.MAX_VALUE, 1);  // throws ArithmeticException

Полезно, когда корректность важнее скорости.

Демонстрация

java— editable, runs on the server

Что дальше

Практика

Практика
Что возвращает Math.pow(2, 10)?
Что возвращает Math.pow(2, 10)?
Was this page helpful?