1

可能重复:
round() 用于 C++ 中的浮点数

我在笔记本电脑上使用了 mingw 和 eclipse 以及 c++98。但是在我的电脑上我有vs2012。

现在我有一个小问题,数学库似乎完全不同。

在 c++98 中,我可以访问roundM_PI使用math.h. 但是在vs2012中它不再存在了。我进行了谷歌搜索,发现以下参考http://en.cppreference.com/w/cpp/numeric/math/round

round不在 cmath 中,也不在 math.h 中。我也找不到M_PI

还有其他数学库吗?

4

3 回答 3

3

round()确实在<cmath>http ://en.cppreference.com/w/cpp/numeric/math/round

M_PI不是 C 或 C++ 标准的一部分,而是在兼容 POSIX 的系统上提供的。MinGW 试图模仿 POSIX 环境,所以它提供了这个。

你可以得到一个很好的近似值double pi = 4 * std::atan(1);

于 2013-02-02T17:23:11.433 回答
2

round 应该<cmath>标头中(参见 C++11 标准的第 26.8 节,表 119),如果不是,则它是一个实现错误。但是,该M_PI常量不是C++11 标准的一部分(参见相同的表 119),尽管某些实现确实提供了它。

例如,使用 GCC 4.7.2 和附带的 libstdc++ 实现,此代码编译:

#include <cmath>

int main()
{
    int x = std::round(M_PI);
}

确保您std::使用round().

于 2013-02-02T17:19:31.360 回答
2

这些是 C++11 中的新功能。MinGW 之前有它是因为 C 兼容,但是 VS2012 不是 C99 编译器。M_PI 可能是同一个故事。IOW,您依赖于 MinGW 的特定于实现的行为,现在它是标准行为,但 VS 尚未完全升级。

于 2013-02-02T17:20:45.273 回答