<math.h>中定义了哪些常量

最近在编写C代码时,需要使用很多数学常数,如圆周率、自然对数等,按习惯都是自己手动定义宏。但是坚信懒惰时人类进步阶梯的我,觉得这样自己定义太麻烦了,尤其是自然对数等这类不常用的常数,还得先使用别的手段获得其值才能定义,于是脑袋里闪出一些歪点子,是不是在标准C头文件中已经有定义了呢。于是研究了一下math.h,还真有收获,总结如下:

在GCC编译器的C标准库中,<math.h>头文件通过预定义宏提供了数学常量,但需注意以下要点:


一、需启用的宏定义

要使用这些常量,需在代码中定义以下宏(或在编译时添加-D_GNU_SOURCE选项):

#define _USE_MATH_DEFINES  // 启用数学常量宏(部分环境需要)
#define __STDC_WANT_IEC_60559_DFP_EXT__  // C23标准扩展支持(可选)

二、常见数学常量列表

宏名称近似值数学意义
M_E2.718281…自然对数的底 (e)
M_LOG2E1.442695…log₂(e)
M_LOG10E0.434294…log₁₀(e)
M_LN20.693147…ln(2)
M_LN102.302585…ln(10)
M_PI3.141592…圆周率 π
M_PI_21.570796…π/2
M_PI_40.785398…π/4
M_1_PI0.318309…1/π
M_2_PI0.636619…2/π
M_2_SQRTPI1.128379…2/√π
M_SQRT21.414213…√2
M_SQRT1_20.707106…1/√2

这些常数,都可以在包含 <math.h>后直接使用。但是遗憾的是,这个头文件中并没有包含光速、万有引力常量等物理常量。

三、使用示例

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

int main() {
    printf("π ≈ %.5f\n", M_PI);        // 输出: π ≈ 3.14159
    printf("√2 ≈ %.5f\n", M_SQRT2);    // 输出: √2 ≈ 1.41421
    return 0;
}

四、注意事项

  1. 可移植性问题

    • 这些常量是GNU扩展,并非所有编译器(如MSVC)默认支持。
    • 在严格C99/C11模式下,需确认是否启用扩展。
  2. 精度差异
    常量值的精度取决于编译器的浮点实现(如float/double)。

  3. 验证方法
    直接查看系统的<math.h>头文件(通常位于/usr/include/math.h)。


建议通过man math.h或查阅GCC文档获取最新信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值