1. ホーム
  2. c++

[解決済み] std::roundからintにキャストするのは安全ですか?

2022-03-11 16:37:41

質問

について質問があります。 std::round をシグネチャとする。 double round (double x);

例えばこんなコードがあるとします。

int i = std::round(0.9);

この場合 std::round を返さなければなりません。 1.00000000000 に近い。 0.9999999999999 浮動小数点演算の誤差で四捨五入されてしまわないか心配です。

私は、次のことを望みます。 i == 1 しかし、これは保証されているのでしょうか?

どのように解決するのですか?

その std::round 関数は、浮動小数点数である " を返します。 ゼロから中途半端なケースを丸める となります。他の double から int 暗黙のうちに変換すると、コンパイラは警告を出します。

double' から 'int' への変換で、データが失われる可能性があります。

使用方法 std::lround または std::lrint は、積分値を返したい場合。