【C语言】math.h中的三角函数

在C语言中,<math.h> 头文件提供了许多数学函数,包括常用的三角函数。这些函数通常接受和返回 double 类型的值(也有 float 和 long double 版本,如 sinf 和 sinl)。以下是主要的三角函数及其参数说明:


1. 基本三角函数

(参数以弧度为单位,而非角度)

  • double sin(double x)
    计算正弦值,x 为弧度值。

  • double cos(double x)
    计算余弦值,x 为弧度值。

  • double tan(double x)
    计算正切值,x 为弧度值。

示例

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

int main() {
    double radian = M_PI / 4; // 45度对应的弧度
    printf("sin(π/4) = %f\n", sin(radian)); // 输出 0.707107
    printf("cos(π/4) = %f\n", cos(radian)); // 输出 0.707107
    printf("tan(π/4) = %f\n", tan(radian)); // 输出 1.000000
    return 0;
}

2. 反三角函数

(返回值是弧度,范围在特定区间内)

  • double asin(double x)
    计算反正弦值,x 需在 [-1, 1] 范围内,返回值范围 [-π/2, π/2]

  • double acos(double x)
    计算反余弦值,x 需在 [-1, 1] 范围内,返回值范围 [0, π]

  • double atan(double x)
    计算反正切值,返回值范围 [-π/2, π/2]

  • double atan2(double y, double x)
    计算 y/x 的反正切值,并正确处理象限,返回值范围 [-π, π]

示例:

double val = 0.5;
printf("asin(0.5) = %f rad\n", asin(val)); // 输出 0.523599 (约30度)
printf("atan2(1,1) = %f rad\n", atan2(1, 1)); // 输出 0.785398 (π/4)

3. 双曲函数

  • double sinh(double x)
    计算双曲正弦值。

  • double cosh(double x)
    计算双曲余弦值。

  • double tanh(double x)
    计算双曲正切值。


4. 角度与弧度转换

<math.h> 没有直接提供角度和弧度转换的函数,但可以手动转换:

double degrees = 45;
double radians = degrees * (M_PI / 180.0); // 角度转弧度
double back_to_degrees = radians * (180.0 / M_PI); // 弧度转角度

//或者使用宏
#define     M_PI    (3.1415926)
#define     deg_to_rad(x)    ((x/180.0)*M_PI)

注意事项:

  1. 参数单位:三角函数使用弧度,需将角度转换为弧度(如 M_PI 是 π 的宏定义)。

  2. 返回值范围:反三角函数的返回值是弧度,需注意范围(如 asin 的结果在 -π/2 到 π/2 之间)。

  3. 精度问题

    • 使用 double 类型时,函数名为 sincos 等。

    • 使用 float 时,函数名为 sinfcosf 等。

    • 使用 long double 时,函数名为 sinlcosl 等。

  4. 编译时链接数学库
    在Linux/GCC下编译需添加 -lm 选项:

     
    gcc program.c -o program -lm

完整示例(角度转弧度计算):

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

int main() {
    double angle = 30.0; // 30度
    double radians = angle * (M_PI / 180.0);
    printf("sin(30°) = %f\n", sin(radians)); // 输出 0.500000
    return 0;
}

如果需要处理角度,建议封装转换函数以提高代码可读性。

posted @ 2025-08-06 21:53  FBshark  阅读(382)  评论(0)    收藏  举报