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 | 
 | 表示弧度角的浮点值。 | 输入 | 
| sinx | 
 | 输出指针sinx。 若为空指针,会出现未定义的行为,接口不会对输出指针进行校验。 | 输出 | 
| cosx | 
 | 输出指针cosx。 若为空指针,会出现未定义的行为,接口不会对输出指针进行校验。 | 输出 | 
返回值
- 返回弧度角x的正弦数值sinx和余弦函数值cosx,sinx ∈ [-1, +1],cosx ∈ [-1, +1]。
- 输入+0,返回正弦值+0和余弦值+1。
- 输入-0,返回正弦值-0和余弦值+1。
- 输入±∞,均返回nan。
- 输入nan,均返回nan。
依赖
#include "km.h"
示例
C interface:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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 
    !
父主题: 三角函数