我注意到M_PI没有c11.通过查看/usr/include/math.h我可以看到M_PI定义如果:
#if !defined(__STRICT_ANSI__) || ((_XOPEN_SOURCE - 0) >= 500)
...
#define M_PI 3.1415...
#endif
Run Code Online (Sandbox Code Playgroud)
而且math.h从glibc __STRICT_ANSI__中取而代之的是__USE_MISC.我完全迷失了.
介于两者之间的故事--std=c11和定义的常量是math.h什么?
libc我应该考虑哪个debian发行版?
顺便说一句,M_PI在定义c99和gnu11...
mil*_*bug 13
它很简单:M_PI没有在标准C中定义.如果您想要符合标准,请提供您自己的定义.
C编译器不能在不破坏合法C程序的情况下引入这样的常量(名称不保留,可以用作标识符),因此,它们仅被定义为扩展名.
使用GCC 4.9时-std=c99没有定义M_PI,但与之一起使用时-std=gnu99
如果您只想M_PI通过POSIX / XOPEN功能测试宏等寻找更全面的答案,则临时解决方案是:
#ifndef M_PI
#define M_PI (3.14159265358979323846)
#endif
Run Code Online (Sandbox Code Playgroud)
这是“ 1.20”格式,对于80位扩展类型的“往返”表示也足够了。双精度为“ 1.16”。对于128位四元精度:
#define M_PI (3.14159265358979323846264338327950288)
Run Code Online (Sandbox Code Playgroud)
往返精度为“ 1.35”格式。这意味着,如果您要打印浮点双精度数并在读回时恢复相同的值,则应对printf函数使用“%+ 1.16”,依此类推。您可能会说双精度数没有17个有效数字,但是如果您想恢复一个值,那么这些数字不是“垃圾”。
无论如何-有比可用资源更好的资源。
| 归档时间: |
|
| 查看次数: |
11024 次 |
| 最近记录: |