C++11数学库已更改?

C++11数学库已更改?,c++,c++11,C++,C++11,可能重复: 我在笔记本电脑上使用了mingw和eclipse以及c++98。但在我的电脑上我有vs2012 现在我有一个小问题,数学库似乎完全不同 在c++98中,我可以通过math.h访问round和M_-PI。但在vs2012中,它不再存在了。我在谷歌上搜索了一下,找到了以下参考资料 但圆不在cmath中,也不在数学中。我也找不到穆皮 是否还有其他数学库?四舍五入应该在标题中,请参见C++11标准的§26.8,表119,如果没有,则是一个实现错误。但是,M_PI常量不是C++11标准的一部

可能重复:

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

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

在c++98中,我可以通过math.h访问round和M_-PI。但在vs2012中,它不再存在了。我在谷歌上搜索了一下,找到了以下参考资料

但圆不在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::namespace限定进行舍入。

舍入应该在标题中,请参见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::namespace限定进行round。

这些在C++11中是新的。MinGW以前拥有它是因为C compat,但VS2012不是C99编译器。穆皮可能也是这样。您看,您在使用MinGW时依赖于特定于实现的行为,现在它是标准行为,但VS还没有完全升级。

这些是C++11中的新功能。MinGW以前拥有它是因为C compat,但VS2012不是C99编译器。穆皮可能也是这样。瞧,您以前在使用MinGW时依赖于特定于实现的行为,现在这是标准行为,但VS还没有完全升级。

这一轮确实是:

MyPI不是C或C++标准的一部分,而是在POSIX兼容系统上提供的东西。MinGW试图模拟POSIX环境,因此它提供了这一点

使用double pi=4*std::atan1;可以得到非常好的近似值

回合确实是在:

MyPI不是C或C++标准的一部分,而是在POSIX兼容系统上提供的东西。MinGW试图模拟POSIX环境,因此它提供了这一点

使用double pi=4*std::atan1;可以得到非常好的近似值

关于round,请参见x-ref。C99在和中都有round,但MSVC仍然实现了没有round的古老C89标准。M_PI是POSIX-ish扩展。函数和宏丢失对我来说并不奇怪。如果在包含或之前定义_使用_MATH_DEFINES,那么将定义M_PI。它们不是默认定义的,因为它们不是C语言或C++语言标准的一部分。Visual C++ 2012没有定义C90函数或C++ 03的一部分,它是C99标准库的一部分,它是C99标准库,Visual C++还没有实现。对于C++,X-RIF.C99在这两个方面都是圆的,但是MSVC仍然实现了没有圆的古C89标准。M_PI是POSIX-ish扩展。函数和宏丢失对我来说并不奇怪。如果在包含或之前定义_使用_MATH_DEFINES,那么将定义M_PI。它们不是默认定义的,因为它们不是C语言或C++语言标准的一部分。Visual C++ 2012没有定义CnC+函数,它不是C90或C++ 03的一部分,而是C99标准库的一部分,Visual C++还没有实现C++ 11。