Spec-Zone.ru › C

asin, asinf, asinl

Определено в заголовке <math.h>
float       asinf( float arg );
(1) (с C99)
double      asin( double arg );
(2)
long double asinl( long double arg );
(3) (с C99)
_Decimal32  asind32( _Decimal32 arg );
(4) (с C23)
_Decimal64  asind64( _Decimal64 arg );
(5) (с C23)
_Decimal128 asind128( _Decimal128 arg );
(6) (с C23)
Определено в заголовке <tgmath.h>
#define asin( arg )
(7) (с C99)
1-6) Вычисляет главные значения арксинуса arg.
7) Универсальный макрос для типов: Если аргумент имеет тип long double, вызывается (3) (asinl). В противном случае, если аргумент имеет целочисленный тип или тип double, вызывается (2) (asin). В противном случае вызывается (1) (asinf). Если аргумент комплексный, то макрос вызывает соответствующую комплексную функцию (casinf, casin, casinl).

Функции (4-6) объявлены только в том случае, если реализация предварительно определяет __STDC_IEC_60559_DFP__ (т.е. реализация поддерживает десятичные числа с плавающей точкой).

(с C23)

Параметры

arg - значение с плавающей точкой

Возвращаемое значение

Если ошибок не произошло, возвращается арксинус arg (arcsin(arg)) в диапазоне [-π/2 ; +π/2].

Если произошла ошибка области определения, возвращается определённое реализацией значение (NaN при поддержке).

Если происходит ошибка диапазона из-за подтекания, возвращается правильный результат (после округления).

Обработка ошибок

Ошибки сообщаются согласно спецификации math_errhandling.

Ошибка области определения возникает, если arg находится вне диапазона [-1.0; 1.0].

Если реализация поддерживает арифметику с плавающей точкой IEEE (IEC 60559):

  • если аргумент равен ±0, он возвращается без изменений;
  • если |arg| > 1, происходит ошибка области определения и возвращается NaN;
  • если аргумент равен NaN, возвращается NaN.

Пример

#include <errno.h>
#include <fenv.h>
#include <math.h>
#include <stdio.h>
#include <string.h>
 
#ifndef __GNUC__
#pragma STDC FENV_ACCESS ON
#endif
 
int main(void)
{
    printf("asin( 1.0) = %+f, 2*asin( 1.0)=%+f\n", asin(1), 2 * asin(1));
    printf("asin(-0.5) = %+f, 6*asin(-0.5)=%+f\n", asin(-0.5), 6 * asin(-0.5));
 
    // special values
    printf("asin(0.0) = %1f, asin(-0.0)=%f\n", asin(+0.0), asin(-0.0));
 
    // error handling
    errno = 0; feclearexcept(FE_ALL_EXCEPT);
    printf("asin(1.1) = %f\n", asin(1.1));
    if (errno == EDOM)
        perror("    errno == EDOM");
    if (fetestexcept(FE_INVALID))
        puts("    FE_INVALID raised");
}

Возможный вывод:

asin( 1.0) = +1.570796, 2*asin( 1.0)=+3.141593
asin(-0.5) = -0.523599, 6*asin(-0.5)=-3.141593
asin(0.0) = 0.000000, asin(-0.0)=-0.000000
asin(1.1) = nan
    errno == EDOM: Numerical argument out of domain
    FE_INVALID raised

Ссылки

  • Стандарт C23 (ISO/IEC 9899:2023):
    • 7.12.4.2 Функции asin (p: TBD)
    • 7.25 Универсальные математические функции <tgmath.h> (p: TBD)
    • F.10.1.2 Функции asin (p: TBD)
  • Стандарт C17 (ISO/IEC 9899:2018):
    • 7.12.4.2 Функции asin (p: 174)
    • 7.25 Универсальные математические функции <tgmath.h> (p: 272-273)
    • F.10.1.2 Функции asin (p: 378)
  • Стандарт C11 (ISO/IEC 9899:2011):
    • 7.12.4.2 Функции asin (p: 238)
    • 7.25 Универсальные математические функции <tgmath.h> (p: 373-375)
    • F.10.1.2 Функции asin (p: 518)
  • Стандарт C99 (ISO/IEC 9899:1999):
    • 7.12.4.2 Функции asin (p: 219)
    • 7.22 Универсальные математические функции <tgmath.h> (p: 335-337)
    • F.9.1.2 Функции asin (p: 456)
  • Стандарт C89/C90 (ISO/IEC 9899:1990):
    • 4.5.2.2 Функция asin

См. также

acosacosfacosl
(C99)(C99)
вычисляет арккосинус (\({\small\arccos{x} }\)\(arccos(x)\))
(функция)
atanatanfatanl
(C99)(C99)
вычисляет арктангенс (\({\small\arctan{x} }\)\(arctan(x)\))
(функция)
atan2atan2fatan2l
(C99)(C99)
вычисляет арктангенс, используя знаки для определения квадрантов
(функция)
sinsinfsinl
(C99)(C99)
вычисляет синус (\({\small\sin{x} }\)\(sin(x)\))
(функция)
casincasinfcasinl
(C99)(C99)(C99)
вычисляет комплексный арксинус
(функция)
Документация C++ для asin

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/numeric/math/asin

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API