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

Функция asin в PHP: вычисление арксинуса
Раздел: Математические функции
asin(float $num): float

Функция asin() в PHP вычисляет арксинус (обратную синусу функцию) числа. Она возвращает угол в радианах, значение синуса которого равно переданному аргументу. Основное использование - в математических расчетах, связанных с геометрией, физикой или обработкой сигналов, когда требуется найти угол по известному значению синуса.

Аргументы функции

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

  • $num (тип float) - число, для которого вычисляется арксинус. Допустимый диапазон значений: от -1 до 1 включительно. Если значение выходит за этот диапазон, функция вернет NAN (Not a Number).

Возвращаемое значение: угол в радианах в диапазоне от -π/2 до π/2 (от -1.5707963267949 до 1.5707963267949 радиан) или NAN в случае ошибки.

Простое использование

Вычисление арксинуса для значения 0.5:

<?php
$result = asin(0.5);
echo $result;
?>
0.5235987755983

Значение в градусах можно получить, умножив результат на (180/π):

<?php
$radians = asin(0.5);
$degrees = $radians * (180 / pi());
echo $degrees;
?>
30
Граничные значения

Работа с значениями на границах допустимого диапазона:

<?php
echo asin(1);  // π/2
echo "\n";
echo asin(-1); // -π/2
?>
1.5707963267949
-1.5707963267949

При передаче значения вне диапазона возвращается NAN:

<?php
$result = asin(1.5);
var_dump($result);
?>
float(NAN)

В PHP существуют другие тригонометрические функции, обратные основным:

  • acos() - вычисляет арккосинус числа. Возвращает угол в радианах, косинус которого равен аргументу. Диапазон возвращаемого значения: от 0 до π.
  • atan() - вычисляет арктангенс числа. Возвращает угол в радианах, тангенс которого равен аргументу. Диапазон: от -π/2 до π/2.
  • atan2() - вычисляет арктангенс от двух переменных $y/$x. Учитывает знаки обоих аргументов для определения четверти угла. Диапазон: от -π до π.

Функцию asin() предпочтительно использовать, когда известно значение синуса и нужно найти угол. Если известно значение косинуса или тангенса, применяют acos() или atan() соответственно. Для преобразования координат в угол часто удобнее atan2().

Python

В модуле math есть функция asin(). Поведение аналогично PHP, но в случае выхода аргумента за диапазон вызывается исключение ValueError (в более старых версиях возвращалось NaN).

import math
result = math.asin(0.5)
print(result)  # 0.5235987755982988
0.5235987755982988
JavaScript

В JS есть метод Math.asin(). Возвращает значение в радианах. При недопустимом аргументе возвращает NaN.

let result = Math.asin(0.5);
console.log(result); // 0.5235987755982989
0.5235987755982989
MySQL

В MySQL существует функция ASIN(). Возвращает NULL, если аргумент находится вне диапазона [-1, 1].

SELECT ASIN(0.5);
0.5235987755982989

Основное отличие PHP-версии - возврат специального значения NAN для недопустимых аргументов, тогда как в других языках могут быть исключения или NULL.

Передача аргумента вне диапазона

Распространенная ошибка - передача значения, которое по модулю больше 1, без предварительной проверки. Это приводит к получению NAN, что может нарушить дальнейшие вычисления.

<?php
// Ошибочный сценарий
$value = 1.2;
$angle = asin($value);
// Дальнейшие операции с $angle будут некорректны
$result = sin($angle);
echo $result;
?>
NAN
Неявное приведение типов

PHP попытается преобразовать нечисловые аргументы к числу. Это может привести к неочевидным результатам.

<?php
echo asin('0.5'); // Работает, строка преобразуется в 0.5
echo "\n";
echo asin('abc'); // Преобразует строку к 0, результат 0
?>
0.5235987755983
0

Рекомендуется явно проверять тип и диапазон входных данных.

В последних версиях PHP (8.x) существенных изменений в работе функции asin() не было. Однако, начиная с PHP 8.0, некоторые математические функции стали более строгими к типам, но asin() по-прежнему выполняет неявное приведение нечисловых значений к числовому типу. В целом, функция остается стабильной и обратно совместимой.

Решение геометрической задачи

Вычисление угла при вершине равнобедренного треугольника, если известны боковая сторона и основание.

Пример php
<?php
$side = 10; // Длина боковой стороны
$base = 12; // Длина основания
// Синус половины угла при вершине: противолежащий катет (половина основания) / гипотенуза (боковая сторона)
$sinHalfAngle = ($base / 2) / $side;
$halfAngle = asin($sinHalfAngle);
$fullAngle = 2 * $halfAngle;
$fullAngleDegrees = $fullAngle * (180 / pi());
echo "Угол при вершине: $fullAngle радиан или $fullAngleDegrees градусов";
?>
Угол при вершине: 1.2870022175866 радиан или 73.739795291688 градусов
Обработка пользовательского ввода

Безопасное вычисление с проверкой диапазона.

Пример php
<?php
function safeAsin($value) {
    if (!is_numeric($value)) {
        throw new InvalidArgumentException("Аргумент должен быть числом");
    }
    $floatVal = (float) $value;
    if ($floatVal < -1 || $floatVal > 1) {
        throw new DomainException("Значение должно быть в диапазоне от -1 до 1");
    }
    return asin($floatVal);
}

// Пример использования
try {
    echo safeAsin(0.3);
} catch (Exception $e) {
    echo "Ошибка: " . $e->getMessage();
}
?>
0.3046926540154
Работа с NAN

Проверка результата на NAN с помощью is_nan().

Пример php
<?php
$result = asin(2);
if (is_nan($result)) {
    echo "Результат не является числом (NAN)";
}
?>
Результат не является числом (NAN)
Использование в ряде Тейлора

Сравнение результата asin() с приближенным вычислением через ряд Тейлора (для x = 0.5).

Пример php
<?php
function asinTaylor($x, $terms = 10) {
    $result = 0;
    for ($n = 0; $n < $terms; $n++) {
        $coeff = (gmp_fact(2 * $n) / (pow(4, $n) * pow(gmp_fact($n), 2) * (2 * $n + 1)));
        $result += $coeff * pow($x, 2 * $n + 1);
    }
    return $result;
}

$x = 0.5;
$exact = asin($x);
$approx = asinTaylor($x, 5);
echo "Точное значение: $exact\n";
echo "Приближенное: $approx\n";
echo "Разница: " . abs($exact - $approx);
?>
Точное значение: 0.5235987755983
Приближенное: 0.5235987755983
Разница: 1.1102230246252E-16

PHP asin function comments

En
Asin Arc sine