1

重複の可能性:
C++ の float の round()

ラップトップで c++98 を使用して mingw と eclipse を使用しました。しかし、私のPCにはvs2012があります。

今、私は小さな問題を抱えています.数学ライブラリは完全に異なっているようです.

c++98 ではround、 とにアクセスできましM_PImath.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_PIC または C++ 標準の一部ではありませんが、POSIX 準拠のシステムで提供されているものです。MinGW は POSIX 環境を模倣しようとするため、これを提供します。

で非常に良い近似を得ることができますdouble pi = 4 * std::atan(1);

于 2013-02-02T17:23:11.433 に答える
2

これらは C++11 の新機能です。MinGW は以前に C 互換性のためにそれを持っていましたが、VS2012 は C99 コンパイラではありません。M_PI もおそらく同じ話です。IOW、MinGW では実装固有の動作に依存していましたが、現在は標準の動作ですが、VS はまだアップグレードされていません。

于 2013-02-02T17:20:45.273 に答える
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 に答える