Освой программирование играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

Класс Math и пакет java.math

Класс Math содержит методы, связанные с геометрией и тригонометрией и прочей математики. Методы реализованы как static, поэтому можно сразу вызывать через Math.methodName() без создания экземпляра класса.

В классе определены две константы типа double: E и PI.

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

  • sin(double d)
  • cos(double d)
  • tan(double d)
  • asin(double d)
  • acos(double d)
  • atan(double d)
  • atan2(double y, double x)

Существуют также гиперболические функции: sinh(), cosh(), tanh().

Экспоненциальные функции: cbrt(), exp(), expm1(), log(), log10(), log1p(), pow(), scalb(), sqrt().

Из них хорошо знакомы возведение в степень - pow(2.0, 3.0) вернёт 8.0.

Также популярен метод для извлечения квадратного корня - sqrt(4.0). Если аргумент меньше нуля, то возвращается NaN. Похожий метод cbrt() извлекает кубический корень. Если аргумент отрицательный, то и возвращаемое значение будет отрицательным: -27.0-> -3.0.

Функции округления:

  • abs() - возвращает абсолютное значение аргумента
  • ceil() - возвращает наименьшее целое число, которое больше аргумента
  • floor() - возвращает наибольшее целое число, которое меньше или равно аргументу
  • max() - возвращает большее из двух чисел
  • min() - возвращает меньшее из двух чисел
  • nextAfter() - возвращает следующее значение после аргумента в заданном направлении
  • nextUp() - возвращает следующее значение в положительном направлении
  • rint() - возвращает ближайшее целое к аргументу
  • round() - возвращает аргумент, округлённый вверх до ближайшего числа
  • ulp() - возвращает дистанцию между значением и ближайшим большим значением

Другие методы

  • copySign() - возвращает аргумент с тем же знаком, что у второго аргумента
  • getExponent() - возвращает экспоненту
  • IEEEremainder() - возвращает остаток от деления
  • hypot() - возвращает длину гипотенузы
  • random() - возвращает случайное число между 0 и 1 (единица в диапазон не входит)
  • signum() - возвращает знак значения
  • toDegrees() - преобразует радианы в градусы
  • toRadians() - преобразует градусы в радианы

Вычислим наибольшее и наименьшее числа из двух заданных значений.


double value1 = 9.14;
double value2 = 9.15;
System.out.println("Maximum of value1 and value2 is " + Math.max(value1, value2));
System.out.println("Minimum of value1 and value2 is " + Math.min(value1, value2));

Большие числа

Если вам не хватает точности основных типов для представления целых и вещественных чисел, то можно использовать классы BigInteger и BigDecimal из пакета java.math, которые предназначены для выполнения действий с числами, состоящими из произвольного количества цифр.

Для преобразования обычного числа в число с произвольной точностью (называемое большим числом) вызывается статический метод valueOf():


BigInteger bigIntegerA = BigInteger.valueOf(42);

При работе с большими числами нельзя использовать привычные математические операции с помощью + или * и т.п. Вместо них следует использовать специальные методы add() (сложение), multiply() (умножение), divide() (деление) и т.д.


BigInteger bigIntegerA = BigInteger.valueOf(42);
BigInteger bigItBigIntegerB = bigIntegerA.add(bigIntegerA);
BigInteger bigIntegerC = bigIntegerA.multiply(bigIntegerA);

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

Реклама