Java. Класс Math. Экспоненциальные функции

Класс Math. Экспоненциальные функции

Данная тема является продолжением темы:


Содержание


Поиск на других ресурсах:

1. Список экспоненциальных функций класса Math

Общий список экспоненциальных функций следующий:

  • cbrt() – возвращает кубический корень из указанного аргумента;
  • exp() – возвращает показательную степень от аргумента;
  • expm1() – возвращает показательную степень от аргумента минус 1;
  • log() – возвращает натуральный логарифм;
  • log10() – возвращает алгоритм с основанием 10;
  • log1p() – возвращает алгоритм от аргумента плюс 1;
  • pow() – возведение в степень;
  • scalb() – возвращает результат x*2^показатель;
  • sqrt() – возвращает квадратный корень из указанного аргумента.

 

2. Функция cbrt(). Корень кубический

Функция cbrt() возвращает корень кубический от аргумента. Согласно документации общая форма объявления функции следующая

double Math.cbrt(double a)

здесь

  • a – число, из которого получается корень кубический.

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

  • a = NaN – результат вызова функции равен NaN;
  • a = Infinity – результат равен Infinity;
  • a = 0.0 – результат равен 0.0.

Приклад.

public class MathFunctions {

  public static void main(String[] args) {

    // Функция cbrt()
    // 1. Положительное число
    double x = 27.0;
    double res = Math.cbrt(x); // res = 3.0
    System.out.println("cbrt(27.0) = " + res);

    // 2. Отрицательное число
    res = Math.cbrt(-729.0); // res = -9.0
    System.out.println("cbrt(-249.0) = " + res);
  }
}

Результат выполнения программы

cbrt(27.0) = 3.0
cbrt(-249.0) = -9.0

 

3. Функция exp(). Показатель степени

Функция exp() возносит число e (e = 2.71828) в степень, которая задана аргументом функции. Объявление функции следующее

double Math.exp(double a)

здесь

  • a – показатель степени, в которую возводится экспонента.

Получаемый результат может быть обработан в соответствии со значением аргумента a, который может быть равен:

  • числовому значению. В этом случае получается соответствующий числовой результат;
  • NaN – получается значение NaN;
  • положительная бесконечность (например, 1.0/0.0) – возвращается результат положительной бесконечности (Infinity);
  • отрицательная бесконечность (например, -1.0/0.0) – возвращается 0.0.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // 1. Функция exp()
    // 1.1. Аргумент - положительное число
    double x = 1.0;
    double res = Math.exp(x); // res = 2.718281828459045
    System.out.println("exp(1.0) = " + res);

    // 1.2. Аргумент - отрицательное число
    res = Math.exp(-1.0); // res = 0.36787944117144233
    System.out.println("exp(-1.0) = " + res);

    // 1.3. Аргумент - положительная бесконечность
    res = Math.exp(1.0/0.0); // res = Infinity
    System.out.println("exp(1.0/0.0) = " + res);

    // 1.4. Аргумент - отрицательная бесконечность
    res = Math.exp(-1.0/0.0); // res = 0.0
    System.out.println("exp(-1.0/0.0) = " + res);
  }
}

Результат

exp(1.0) = 2.718281828459045
exp(-1.0) = 0.36787944117144233
exp(1.0/0.0) = Infinity
exp(-1.0/0.0) = 0.0

 

4. Функция expm1(). Вычислить exp(x)-1

Для заданного x функция expm1() вычисляет выражение

Согласно документации для заданного аргумента x объявления функции следующее

double Math.expm1(double x)

Функция полезна для получения более точных значений по сравнению с функцией ex в случае, когда аргумент x близок к 0. В таком случае в программе реализуется вызов

expm1(x) + 1

В зависимости от значения аргумента x рассматриваются следующие особые ситуации:

  • x – любое положительное число. В этом случае результат функции будет больше или равен -1.0;
  • x = NaN – функция возвращает NaN;
  • x = Infinity (положительная бесконечность) – функция возвращает Infinity;
  • x = -Infinity (отрицательная бесконечность) – результат возврата –1.0;
  • x = 0.0 – результат равен 0.0.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // 1. Функция expm1()
    // 1.1. Аргумент - положительное число
    double x = 1.0;
    double res = Math.expm1(x); // res = 1.718281828459045
    System.out.println("expm1(1.0) = " + res);

    // 1.2. Аргумент - отрицательное число
    res = Math.expm1(-2.0); // res = -0.8646647167633873
    System.out.println("expm1(-2.0) = " + res);

    // 1.3. Аргумент - положительная бесконечность
    res = Math.expm1(1.0/0.0); // res = Infinity
    System.out.println("expm1(1.0/0.0) = " + res);

    // 1.4. Аргумент - отрицательная бесконечность
    res = Math.expm1(-1.0/0.0); // res = -1.0
    System.out.println("expm1(-1.0/0.0) = " + res);
  }
}

Результат

expm1(1.0) = 1.718281828459045
expm1(-2.0) = -0.8646647167633873
expm1(1.0/0.0) = Infinity
expm1(-1.0/0.0) = -1.0

 

5. Функція log(). Натуральний логарифм

Для получения логарифма с основанием e (натурального логарифма) используется функция log(). Объявление функции следующее

double Math.log(double a)

Для аргумента a рассматриваются следующие возможные ситуации:

  • если a = NaN, то функция возвращает NaN;
  • a = Infinity – функция возвращает Infinity;
  • a = 0.0 – функция возвращает -Infinity.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // 1. Функция log() - натуральный логарифм
    // 1.1. Аргумент - положительное число
    double x = Math.exp(1.0);
    double res = Math.log(x); // res = 1.0
    System.out.println("log(exp(1.0)) = " + res);

    res = Math.log(1.0); // res = 0.0
    System.out.println("log(1.0) = " + res);

    res = Math.log(5.5); // res = 1.7047480922384253
    System.out.println("log(5.5) = " + res);

    // 1.2. Аргумент - нулевое значение
    res = Math.log(0.0); // res = -Infinity
    System.out.println("log(0.0) = " + res);

    // 1.3. Аргумент - отрицательное значение
    res = Math.log(-1.0); // res = NaN
    System.out.println("log(-1.0) = " + res);

    // 1.4. Аргумент - NaN
    res = Math.log(Math.log(-1.0)); // res = NaN
    System.out.println("log(NaN) = " + res);
  }
}

Результат

log(exp(1.0)) = 1.0
log(1.0) = 0.0
log(5.5) = 1.7047480922384253
log(0.0) = -Infinity
log(-1.0) = NaN
log(NaN) = NaN

 

6. Функция log10(). Логарифм с основанием 10

Функция log10() используется для получения значения логарифма с основанием 10. Общая форма объявления функции

double java.lang.Math.log10(double a)

здесь

  • a – значение, из которого требуется получить логарифм.

Полученный результат зависит от значения a, для которого рассматриваются следующие случаи:

  • если a = NaN или a < 0, то результат также NaN;
  • если a > 0 , то результат тоже положительное число;
  • если a = 0, то результат равен Infinity (бесконечность);
  • если a = 10n для целого n, то результат равен n.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция log10() - логарифм с основанием 10
    // 1. Аргумент - положительное число
    double x = 100;
    double res = Math.log10(x); // res = 2.0
    System.out.println("log10(100) = " + res);

    res = Math.log10(1.0); // res = 0.0
    System.out.println("log10(1.0) = " + res);

    // 2. Аргумент - нулевое значение
    res = Math.log10(0.0); // res = -Infinity
    System.out.println("log10(0.0) = " + res);

    // 3. Аргумент - отрицательное значение
    res = Math.log10(-10.0); // res = NaN
    System.out.println("log10(-10.0) = " + res);

    // 4. Аргумент - NaN
    res = Math.log10(Math.log10(-1.0)); // res = NaN
    System.out.println("log10(NaN) = " + res);

    // 5. Аргумент - Infinity
    res = Math.log10(5.0/0.0); // res = Infinity
    System.out.println("log10(Infinity) = " + res);
  }
}

Результат

log10(100) = 2.0
log10(1.0) = 0.0
log10(0.0) = -Infinity
log10(-10.0) = NaN
log10(NaN) = NaN
log10(Infinity) = Infinity

 

7. Функция log1p(). Логарифм аргумента + 1

Функция log1p() возвращает натуральный логарифм от суммы значения аргумента и 1. Функция log1p(x) используется для более точного результата по сравнению с вызовом log(1.0+x).

Общая форма объявления функции

double log1p(double x)

здесь x – значение, для которого получается результат.

В зависимости от значения x рассматриваются следующие случаи:

  • если x = NaN или x < -1, то результат равен NaN;
  • если x = -1.0, то результат равен -Infinity;
  • если x = Infinity, то функция возвращает Infinity;
  • если x = 0.0, то функция возвращает 0.0.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция log1p(x) => log(x + 1)
    // 1. Аргумент x > -1.0
    double x = 1.71;
    double res = Math.log1p(x); // res = 0.9969486348916095
    System.out.println("log1p(101) = " + res);

    // 2. x = NaN
    res = Math.log1p(Math.log(-10)); // res = NaN
    System.out.println("log1p(NaN) = " + res);

    // 3. x < -1.0
    res = Math.log1p(-2.5);
    System.out.println("log1p(x<-1) = " + res);

    // 4. x = -1.0
    res = Math.log1p(-1.0); // res = -Infinity
    System.out.println("log1p(-1) = " + res);

    // 5. x = Infinity
    res = Math.log1p(5.0/0.0); // res = Infinity
    System.out.println("log1p(Infinity) = " + res);

    // 6. x = 0.0
    res = Math.log1p(0.0); // res = 0.0
    System.out.println("log1p(0) = " + res);
  }
}

Результат

log1p(101) = 0.9969486348916095
log1p(NaN) = NaN
log1p(x<-1) = NaN
log1p(-1) = -Infinity
log1p(Infinity) = Infinity
log1p(0) = 0.0

 

8. Функция pow(). Возведение в степень

Согласно документации общая форма объявления функции следующая

double pow(double a, double b)

здесь

  • a – основание, которое возводится в степень b;
  • b – показатель степени.

Соответственно вызов функции выглядит примерно так

res = pow(a, b);

Аргументы a, b могут принимать разные значения. Исходя из этого контекста рассматриваются следующие случаи:

  • если b = -0.0 или b = 0.0 то результат равен 1.0 (res = 1.0);
  • если b = 1.0 то res = a;
  • если b = NaN то res = NaN;
  • если a = NaN и b ≠ 0 то res = NaN;
  • если |a| > 1 и b = Infinity то res = Infinity;
  • если |a| < 1 и b = -Infinity то res = Infinity;
  • если |a| > 1 и b = -Infinity то res = +0.0;
  • если |a| < 1 и b = Infinity то res = +0.0;
  • если |a| = 1 и b = Infinity то res = NaN;
  • если a = +0.0 и b > 0 то res = +0.0;
  • если a = Infinity и b < 0 то res = +0.0;
  • если a = +0.0 и b < 0 то res = Infinity;
  • если a = Infinity и b > 0.0 то res = Infinity;
  • если a = -0.0 и b > 0.0 и b не является нечетным целым, то res = +0.0;
  • если a = -Infinity и b < 0.0 и не является нечетным целым, то res = +0.0;
  • если a = -0.0 и b является нечетным целым то res = -0.0;
  • если a = -0.0 и b < 0.0 и b не является нечетным целым то res = Infinity;
  • если a = -Infinity и b > 0.0 и b не является нечетным целым то res = Infinity;
  • если a = -0.0 и b является отрицательным нечетным целым то res = -Infinity;
  • если a = -Infinity и b является положительным нечетным целым то res = -Infinity.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция pow - возведение в степень
    // 1. Обычные числа
    double a = 2.5;
    double b = 3.8;
    double res = Math.pow(a, b); // res = 32.52160966413567
    System.out.println("2.5 ^ 3.8 = " + res);

    res = Math.pow(8, 0); // res = 1.0
    System.out.println("8 ^ 0 = " + res);

    res = Math.pow(0.0, 2.5);
    System.out.println("0 ^ 2.5 = " + res);

    // 2. Необычные ситуации
    res = Math.pow(5.0/0.0, -2.0); // res = 0.0
    System.out.println("Infinity ^ -2.0 => " + res);

    res = Math.pow(3.0, 1.0/0.0); // res = Infinity
    System.out.println("3.0 ^ Infinity = > " + res);

    res = Math.pow(3.0, -1.0/0.0); // res = 0.0
    System.out.println("3.0 ^ -Infinity => " + res);
  }
}

Результат

2.5 ^ 3.8 = 32.52160966413567
8 ^ 0 = 1.0
0 ^ 2.5 = 0.0
Infinity ^ -2.0 => 0.0
3.0 ^ Infinity = > Infinity
3.0 ^ -Infinity => 0.0

 

9. Функция scalb(). Возведение в степень кратную 2

Функция scalb() возвращает произведение заданного числа на 2 в заданной степени. Общая форма объявления функции

double scalb(double d, int scaleFactor)

здесь

  • d – число, которое умножается на 2 в степени scaleFactor;
  • scaleFactor – показатель степени двойки.

При вызове функции возвращается результат

d × 2scaleFactor

Точный результат возвращается, если показатель степени результата находится в пределах от Double.MIN_EXPONENT до Double.MAX_EXPONENT. В противном случае результат есть бесконечность.

При использовании функции рассматриваются следующие возможные случаи:

  • если d = NaN, то результат равен NaN;
  • если d = Infinity, то функция возвращает Infinity;
  • если d = -Infinity, то функция возвращает –Infinity;
  • если d = 0, то функция возвращает 0.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция scalb - возведение в степень кратную 2
    // 1. Обычные числа
    double a = 2.5;
    int b = 3;
    double res = Math.scalb(a, b); // res = 2.5*2^3 = 20.0
    System.out.println("scalb(2.5, 3) = " + res);

    // 2. Необычные ситуации
    res = Math.scalb(Math.log(-2), 2); // res = NaN
    System.out.println("scalb(NaN, 2) = " + res);

    res = Math.scalb(5.0/0.0, 4); // res = Infinity
    System.out.println("scalb(Infinity, 4) = " + res);

    res = Math.scalb(0.0, 2); // res = 0.0
    System.out.println("scalb(0.0, 2) = " + res);
  }
}

Результат

scalb(2.5, 3) = 20.0
scalb(NaN, 2) = NaN
scalb(Infinity, 4) = Infinity
scalb(0.0, 2) = 0.0

 

10. Функция sqrt(). Корень квадратный

Для извлечения квадратного корня из числа используется функция sqrt(). Общая форма объявления функции

double java.lang.Math.sqrt(double a)

здесь a – аргумент из которого нужно получить число.

При использовании функции рассматриваются следующие особые случаи:

  • если a = NaN то результат также равен NaN;
  • если a < 0, то результат равен NaN;
  • если a = Infinity, то результат равен Infinity;
  • если a = 0, то результат равен a.

Пример.

public class MathFunctions {

  public static void main(String[] args) {
    // Функция sqrt - корень квадратный
    // 1. Корень из положительного числа
    double x = 121.0;
    double res = Math.sqrt(x);
    System.out.println("sqrt(121) = " + res);

    // 2. Корень из NaN
    res = Math.sqrt(Double.NaN); // res = NaN
    System.out.println("sqrt(NaN) = " + res);

    // 3. Корень из отрицательного числа
    res = Math.sqrt(-1.0); // res = NaN
    System.out.println("sqrt(-1) = " + res);

    // 4. Корень из Infinity
    res = Math.sqrt(Double.POSITIVE_INFINITY); // res = Infinity
    System.out.println("sqrt(Infinity) = " + res);

    // 5. Корень из 0
    res = Math.sqrt(0.0); // sqrt(0) = 0.0
    System.out.println("sqrt(0) = " + res);
  }
}

Результат

sqrt(121) = 11.0
sqrt(NaN) = NaN
sqrt(-1) = NaN
sqrt(Infinity) = Infinity
sqrt(0) = 0.0

 


Связанные темы