Expm1: примеры (PHP)

Работа с функцией expm1 в PHP: полный обзор
Раздел: Математические функции
expm1(float $num): float

Функция expm1 в PHP

Функция expm1() вычисляет значение выражения ex - 1, где e – основание натурального логарифма (число Эйлера), а x – переданный аргумент. Этот метод предоставляет высокую точность для результатов, близких к нулю, что делает его особенно полезным в научных и финансовых расчетах.

Когда используется

Основное применение функции – вычисления, где требуется повышенная точность при работе с малыми значениями аргумента. Прямое вычисление exp(x) - 1 для очень маленьких x может привести к потере значащих цифр из-за особенностей представления чисел с плавающей запятой. expm1() решает эту проблему, используя специализированные алгоритмы.

Аргументы

Функция принимает один обязательный параметр:

  • $x (float) – показатель степени, в которую возводится число e.

Возвращаемое значение всегда имеет тип float.

Примеры использования

Базовые вычисления

Вычисление для положительных и отрицательных чисел:

echo expm1(1);
1.718281828459
echo expm1(-0.5);
-0.393469340287
Работа с малыми значениями

Сравнение точности с обычным вычислением:

$x = 1e-8;
echo 'expm1: ' . expm1($x) . "\n";
echo 'exp-1: ' . (exp($x) - 1);
expm1: 1.000000005e-8
exp-1: 1.0000000065512e-8
Особые случаи
echo expm1(0);
0
echo expm1(INF);
INF

Похожие функции в PHP

  • exp() – вычисляет ex. Используется, когда не требуется повышенная точность для малых значений.
  • pow() и оператор ** – позволяют возводить в произвольную степень, но не оптимизированы для вычисления ex - 1.
  • log1p() – обратная операция, вычисляет log(1 + x) с высокой точностью для малых x.

Выбор между exp() и expm1() зависит от требуемой точности и диапазона входных значений.

Аналоги в других языках

Expm1 в Python

import math
print(math.expm1(1e-10))
1.00000000005e-10

Expm1 в Javascript

console.log(Math.expm1(0.1));
0.10517091807564763

Expm1 в MySQL

SELECT EXP(0.01) - 1;
0.010050167084168

В Python и JavaScript функции имеют такое же название и аналогичное назначение. В MySQL прямой аналогии нет, используется комбинация EXP() - 1.

Типичные ошибки

Передача нечисловых аргументов
echo expm1('текст');
В PHP 8+: TypeError: expm1(): Argument #1 ($num) must be of type float, string given
Некорректная интерпретация больших чисел
$large = 1e10;
echo expm1($large);
INF

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

Изменения в PHP 8

В PHP 8.0 функция стала строго типизированной. Аргумент теперь должен быть типа float, int или типа, который можно преобразовать в число. Передача нечисловых значений вызывает TypeError. В предыдущих версиях такие аргументы преобразовывались с предупреждениями.

Расширенные примеры

Вычисление гиперболических функций
Пример php
function sinh1($x) {
    return (expm1($x) + expm1(-$x)) / 2;
}
echo sinh1(0.5);
0.521095305494
Финансовые расчеты с непрерывным начислением
Пример php
$principal = 1000;
$rate = 0.05;
$time = 2;
$futureValue = $principal * expm1($rate * $time) + $principal;
echo $futureValue;
1105.1709180756
Статистические вычисления
Пример php
// Логарифмирование произведения вероятностей
$probabilities = [0.999999, 0.999998];
$logSum = array_sum(array_map('log1p', array_map(function($p) {
    return $p - 1;
}, $probabilities)));
$original = expm1($logSum) + 1;
echo $original;
0.999997000001
Итеративные вычисления
Пример php
// Вычисление суммы ряда с использованием expm1 для малых шагов
$sum = 0;
for ($i = 0; $i < 1000; $i++) {
    $sum += expm1($i * 0.0001);
}
echo $sum;
51.70927106499

PHP expm1 function comments

En
Expm1 Returns exp($num) - 1, computed in a way that is accurate even when the value of $num is close to zero