---
title: sincos
description: "同时计算输入弧度的正弦值和余弦值。"
url: https://www.hikunpeng.com/document/detail/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0155.html
sourcePath: /source/zh/hpchistory/hpckit/develop2400/kunpengaccel_kml_0155.html
indexId: 72552b924a05b705c6731f38856cc5e53ea1b09bd4353013a26b13fb769c4a8a67
---
# sincos

同时计算输入弧度的正弦值和余弦值。

#### 接口定义

C interface：

void sincosf(float x, float* sinx, float* cosx);

void sincosf_18(float x, float* sinx, float* cosx);

void sincos(double x, double* sinx, double* cosx);

void sincosl(long double x, long double* sinx, long double* cosx);

sincosf_18仅在高精度版本提供。


Fortran interface：

CALL SINCOSF(X, SINX, COSX);

CALL SINCOS(X, SINX, COSX);


#### 参数

| 参数名 | 类型 | 描述 | 输入/输出 |
| --- | --- | --- | --- |
| x | 在sincosf和sincosf\_18中，x是单精度浮点类型。 在sincos中，x是双精度浮点类型。 在sincosl中，x是长双精度浮点类型。 | 表示弧度角的浮点值。 | 输入 |
| sinx | 在sincosf和sincosf\_18中，x是单精度浮点类型。 在sincos中，x是双精度浮点类型。 在sincosl中，x是长双精度浮点类型。 | 输出指针sinx。 若为空指针，会出现未定义的行为，接口不会对输出指针进行校验。 | 输出 |
| cosx | 在sincosf和sincosf\_18中，x是单精度浮点类型。 在sincos中，x是双精度浮点类型。 在sincosl中，x是长双精度浮点类型。 | 输出指针cosx。 若为空指针，会出现未定义的行为，接口不会对输出指针进行校验。 | 输出 |


#### 返回值

- 返回弧度角x的正弦数值sinx和余弦函数值cosx，sinx ∈ [-1, +1]，cosx ∈ [-1, +1]。
- 输入+0，返回正弦值+0和余弦值+1。
- 输入-0，返回正弦值-0和余弦值+1。
- 输入±∞，均返回nan。
- 输入nan，均返回nan。


#### 依赖

#include "km.h"


#### 示例

C interface：

```
double pi = acos(-1); 
    // typical usage 
    double a = pi/6, b = 1.0, c = -3*pi/4, d = pi/3; 
    // special handling 
    double e = INFINITY, f = -INFINITY, g = NAN; 
    // print result 
    double sinx, cosx; 
    sincos(a, &sinx, &cosx); 
    printf("sin(pi/6) = %.15f, cos(pi/6) = %.15f\n", sinx, cosx); 
    sincos(b, &sinx,&cosx); 
    printf("sin(1.0) = %.15f, cos(1.0) = %.15f\n", sinx, cosx); 
    sincos(c, &sinx,&cosx); 
    printf("sin(-3*pi/4) = %.15f, cos(-3*pi/4) = %.15f\n", sinx, cosx); 
    sincos(d, &sinx,&cosx); 
    printf("sin(pi/3) = %.15f, cos(pi/3) = %.15f\n", sinx, cosx); 
    sincos(e, &sinx,&cosx); 
    printf("sin(INFINITY) = %.15f, cos(INFINITY) = %.15f\n", sinx, cosx); 
    sincos(f, &sinx,&cosx); 
    printf("sin(-INFINITY) = %.15f, cos(-INFINITY) =  %.15f\n", sinx, cosx); 
    sincos(g, &sinx,&cosx); 
    printf("sin(NAN) = %.15f, cos(NAN) = %.15f\n", sinx, cosx); 
    /* 
     *  sin(pi/6) = 0.500000000000000, cos(pi/6) = 0.866025403784439 
     *  sin(1.0) = 0.841470984807897, cos(1.0) = 0.540302305868140 
     *  sin(-3*pi/4) = -0.707106781186548, cos(-3*pi/4) = -0.707106781186547 
     *  sin(pi/3) = 0.866025403784439, cos(pi/3) = 0.500000000000000 
     *  sin(INFINITY) = -nan, cos(INFINITY) = nan 
     *  sin(-INFINITY) = -nan, cos(-INFINITY) =  nan 
     *  sin(NAN) = nan, cos(NAN) = -nan 
     * 
     * */
```

Fortran interface：

```
REAL(8) :: X = 1.0
REAL(8), TARGET :: SINX, COSX
TYPE(C_PTR) :: PSINX, PCOSX
PSINX = C_LOC(SINX)
PCOSX = C_LOC(COSX)
CALL SINCOS(X, PSINX, PCOSX)
PRINT*,  SINX, COSX
!
! OUTPUT
!     0.841470984807897 0.540302305868140
!
```
