Рубрики
Без рубрики

Java 8 Математика Новые методы

Узнайте о новых математических методах, появившихся в Java 8

Автор оригинала: baeldung.

1. введение

Обычно, когда мы думаем о новых функциях, которые появились в версии 8 Java, функциональное программирование и лямбда-выражения-это первое, что приходит на ум.

Тем не менее, помимо этих больших функций есть и другие, возможно, имеющие меньшее влияние, но также интересные и во многих случаях не очень известные или даже не охваченные каким-либо обзором.

В этом уроке мы перечислим и приведем небольшой пример каждого из новых методов, добавленных в один из основных классов языка: java.lang.Математика .

2. Новые *точные() Методы

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

Как мы увидим, они вполне понятны, поскольку имеют точно такую же функциональность, как и методы, из которых они получены, но с добавлением исключения в случае, если результирующее значение переполняет значения max или min

Мы можем использовать эти методы как с целыми числами , так и с длинными в качестве параметров.

2.1. Дополнение()

Добавляет два параметра, выбрасывая ArithmeticException в случае переполнения (что относится ко всем *Точный() методы) добавления:

Math.addExact(100, 50);               // returns 150
Math.addExact(Integer.MAX_VALUE, 1);  // throws ArithmeticException

2.2. вычитание()

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

Math.subtractExact(100, 50);           // returns 50
Math.subtractExact(Long.MIN_VALUE, 1); // throws ArithmeticException

2.3. incrementExact()

Увеличивает параметр на единицу, вызывая ArithmeticException в случае переполнения:

Math.incrementExact(100);               // returns 101
Math.incrementExact(Integer.MAX_VALUE); // throws ArithmeticException

2.4. decrementExact()

Уменьшает параметр на единицу, вызывая ArithmeticException в случае переполнения:

Math.decrementExact(100);            // returns 99
Math.decrementExact(Long.MIN_VALUE); // throws ArithmeticException

2.5. Мультипликативный эффект()

Умножьте два параметра, вызывая ArithmeticException в случае переполнения продукта:

Math.multiplyExact(100, 5);            // returns 500
Math.multiplyExact(Long.MAX_VALUE, 2); // throws ArithmeticException

2.6. Отрицание действия()

Изменяет знак параметра, вызывая ArithmeticException в случае переполнения.

В этом случае мы должны подумать о внутреннем представлении значения в памяти, чтобы понять, почему происходит переполнение, поскольку это не так интуитивно, как остальные “точные” методы:

Math.negateExact(100);               // returns -100
Math.negateExact(Integer.MIN_VALUE); // throws ArithmeticException

Второй пример требует объяснения, поскольку это не очевидно: Переполнение происходит из-за Целого числа.MIN_VALUE -2.147.483.648, а с другой стороны Целое число.MAX_VALUE равно 2.147.483.647 , поэтому возвращаемое значение не вписывается в Целое число на одну единицу.

3. Другие Методы

3.1. floorDiv()

Делит первый параметр на второй, а затем выполняет операцию floor() над результатом, возвращая Целое число , которое меньше или равно фактору:

Math.floorDiv(7, 2));  // returns 3

Точное частное равно 3,5, поэтому floor(3.5) .

Давайте рассмотрим другой пример:

Math.floorDiv(-7, 2)); // returns -4

Точное частное равно -3,5, так что этаж(-3,5) == -4.

3.2. modDiv()

Этот метод аналогичен предыдущему методу floorDiv() , но применяет операцию floor() над модулем или остатком деления вместо частного:

Math.modDiv(5, 3));  // returns 2

Как мы видим, modDiv() для двух положительных чисел совпадает с оператором% . Давайте рассмотрим другой пример:

Math.modDiv(-5, 3));  // returns 1

Он возвращает 1, а не 2, потому что floorDiv(-5, 3) равен -2, а не -1.

3.3. nextDown()

Возвращает сразу же меньшее значение параметра (поддерживает float или double параметры):

float f = Math.nextDown(3);  // returns 2.9999998
double d = Math.nextDown(3); // returns 2.999999761581421

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

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

Как всегда, полный исходный код доступен на GitHub .