acos, acosf, acosl

Calculates the arccosine.


double acos( double x );
float acosf( float x );
long double acosl( long double x );
#define acos(X) // Requires C11 or higher

float acos( float x );   // C++ only
long double acos( long double x );   // C++ only


Value between -1 and 1, for which to calculate the arccosine (the inverse cosine).

Return value

The acos function returns the arccosine of x in the range 0 to π radians.

By default, if x is less than -1 or greater than 1, acos returns an indefinite.

Input SEH exception _matherr exception
± QNaN, IND none _DOMAIN


Because C++ allows overloading, you can call overloads of acos that take and return float and long double types. In a C program, unless you're using the <tgmath.h> macro to call this function, acos always takes and returns a double.

If you use the acos macro from <tgmath.h>, the type of the argument determines which version of the function is selected. See Type-generic math for details.

By default, this function's global state is scoped to the application. To change this behavior, see Global state in the CRT.


Routine Required header Optional headers
acos, acosf, acosl <math.h> <errno.h>
acos macro <tgmath.h>


This program prompts for a value in the range -1 to 1. Input values outside this range produce _DOMAIN error messages. If a valid value is entered, the program prints the arcsine and the arccosine of that value.

// crt_asincos.c
// arguments: 0

#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main( int ac, char* av[] )
    double  x,
    errno_t err;

    // argument checking
    if (ac != 2)
        fprintf_s( stderr, "Usage: %s <number between -1 and 1>\n",
        return 1;

    // Convert argument into a double value
    if ((err = sscanf_s( av[1], "%lf", &x )) != 1)
        fprintf_s( stderr, "Error converting argument into ",
                   "double value.\n");
        return 1;

    // Arcsine of X
    y = asin( x );
    printf_s( "Arcsine of %f = %f\n", x, y );

    // Arccosine of X
    y = acos( x );
    printf_s( "Arccosine of %f = %f\n", x, y );
Arcsine of 0.000000 = 0.000000
Arccosine of 0.000000 = 1.570796

See also

Math and floating-point support
asin, asinf, asinl
atan, atanf, atanl, atan2, atan2f, atan2l
cos, cosf, cosl
sin, sinf, sinl
tan, tanf, tanl