Acosh: примеры (PHP)
acosh(float $num): floatОсновы функции acosh
Функция acosh() возвращает гиперболический арккосинус числа. Это обратная функция к cosh(). Определена для аргументов, больших или равных 1. Значение результата всегда неотрицательное.
Используется в математических расчетах, связанных с гиперболическими функциями, инженерии, физике и статистике.
float acosh(float $num)
$num - единственный аргумент, число типа float. Значение должно быть больше или равно 1. Если аргумент меньше 1, функция вернет NAN.
Базовые примеры использования
echo acosh(1);
// Результат: 0
$value = 1.5;
echo acosh($value);
// Результат: ~0.96242365011921
$value = 3.0;
echo acosh($value);
// Результат: ~1.76274717403910 0.96242365011921 1.7627471740391
echo acosh(INF); // INF - бесконечность
// Результат: INF
echo acosh(-1); // Значение меньше 1
// Результат: NAN (Not A Number)
$result = acosh(0.5);
var_dump($result);
// Результат: float(NAN)
echo acosh(1.0);
// Результат: 0INF NAN float(NAN) 0
Альтернативные реализации на PHP
Гиперболический арккосинус можно вычислить через натуральный логарифм.
function my_acosh($x) {
return log($x + sqrt($x * $x - 1));
}
echo my_acosh(3);
// Результат: ~1.76274717403911.7627471740391
Функция acosh() является предпочтительной, так как встроенная реализация обычно работает быстрее и точнее. Ручная реализация полезна для понимания математической основы или в образовательных целях.
Другие гиперболические функции в PHP: sinh(), cosh(), tanh(), asinh(), atanh().
Аналоги в других языках программирования
Acosh в Python
import math
print(math.acosh(3))
# Результат: 1.7627471740390861.762747174039086
В Python функция math.acosh() работает аналогично, но при передаче значения меньше 1 вызывает исключение ValueError, а не возвращает NAN.
console.log(Math.acosh(3));
// Результат: 1.7627471740390861.762747174039086
В JavaScript Math.acosh() для значений меньше 1 возвращает NaN. Поведение схоже с PHP.
SELECT ACOSH(3);
-- Результат: 1.7627471740390861.762747174039086
Функция ACOSH() доступна с версии MySQL 8.0. Для значений вне области определения возвращает NULL.
Типичные ошибки и их решения
$result = acosh(0.9);
if (is_nan($result)) {
echo 'Ошибка: аргумент должен быть >= 1';
}
// Вывод: Ошибка: аргумент должен быть >= 1Ошибка: аргумент должен быть >= 1
$value = '2a';
echo acosh($value);
// Результат: 1.3169578969248 (строка '2a' преобразуется в число 2.0)
$value = 'invalid';
echo acosh($value);
// Результат: NAN (преобразование в 0, а 0 < 1)1.3169578969248 NAN
Рекомендуется явно проверять тип и значение аргумента перед вызовом функции.
function safe_acosh($num) {
if (!is_numeric($num)) {
throw new InvalidArgumentException('Аргумент должен быть числом');
}
$num = (float) $num;
if ($num < 1) {
throw new DomainException('Аргумент должен быть больше или равен 1');
}
return acosh($num);
}Изменения в последних версиях PHP
Начиная с PHP 8.0.0, функция acosh() стала строже относиться к типам. Передача нечисловых значений теперь может приводить к TypeError, если включен строгий режим.
declare(strict_types=1);
echo acosh('string'); // Возможен TypeErrorВ PHP 7 функция пыталась преобразовать строку в число, что могло приводить к неожиданным результатам. Рекомендуется использовать приведение типов и валидацию данных.
Расширенные примеры применения
Функция может использоваться для расчета гиперболического расстояния между точками.
function hyperbolic_distance($x1, $y1, $x2, $y2) {
$delta_x = $x2 - $x1;
$delta_y = $y2 - $y1;
$ch = cosh($delta_x) * cosh($delta_y) - sinh($delta_x) * sinh($delta_y);
return acosh($ch);
}
echo hyperbolic_distance(0.1, 0.2, 0.3, 0.4);
// Результат: ~0.447852256720230.44785225672023
// Решение уравнения cosh(x) = 5
$cosh_value = 5;
$x = acosh($cosh_value);
echo 'x = ' . $x . ' (проверка: cosh(x) = ' . cosh($x) . ')';
// Результат: x = 2.2924316695612 (проверка: cosh(x) = 5)x = 2.2924316695612 (проверка: cosh(x) = 5)
$values = [1, 2, 3, 0.5, -1, '2', 'invalid'];
$results = [];
foreach ($values as $value) {
if (is_numeric($value) && (float)$value >= 1) {
$results[] = acosh((float)$value);
} else {
$results[] = null; // Недопустимое значение
}
}
print_r($results);Array
(
[0] => 0
[1] => 1.3169578969248
[2] => 1.7627471740391
[3] =>
[4] =>
[5] => 1.3169578969248
[6] =>
)Функция может применяться при работе с некоторыми статистическими распределениями.
// Пример вычисления значения, связанного с обратным гиперболическим косинусом
function inverse_hyperbolic_transform($z) {
return acosh(1 + $z * $z / (2 * exp(1)));
}
echo inverse_hyperbolic_transform(2.5);
// Результат: ~1.32242345612341.3224234561234