sincos
同时计算实数的正弦值和余弦值。
接口定义
C interface:
void sincosf(float x, float* sinx, float* cosx);
void sincos(double x, double* sinx, double* cosx);
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:
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, cos1.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
!
父主题: KML_MATH库函数说明