我尝试打印出库 math.h
中定义的 pi 值,该库在我的系统上是
# 定义 M_PI 3.14159265358979323846/* pi */
用这个简单的代码:
#include <stdio.h>
#include <math.h>
int main() {
long double a = M_PI;
printf("%.20Lf\n", a);
return 0;
}
我得到的输出是
3.14159265358979311600
为什么它与 math.h
库中定义的不同?
有没有办法重现库中定义的内容?
我的手册说类型 long double
将精度扩展到 24 位。应该不足以代表这个数字吗?
最佳答案
可以通过调用 acosl(-1);
以标准方式查询实现提供的数学常数 π (pi) 的最佳精度:
const long double pi = acosl(-1.0L);
printf("%.20Lf\n", pi);
由于此方法具有执行计算的额外开销(而您的方法使用编译时常量),因此建议将结果放入常量变量中并将其用于整个程序,仅执行一次计算。优点是它是可移植的。这将以目标平台上可用的最佳精度计算 π,并且在切换平台时需要零代码更改。
标准禁止一致的实现定义常量M_PI
,因为实现定义的保留名称必须以_
开头,后跟大写字母或另一个 _
。如果你想使用它,你必须自己定义它。
关于c - 用C打印pi值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61932813/