-1

今日、VS2010 がroundC++ プロジェクトの関数をサポートしていないことがわかりました。その機能に関する情報はhere で見つかりました。また、機能がないことにも気づきましたtrunc

そのため、いくつかのことを試してみて、そのような状況で役立つ可能性のあるいくつかの動作に気付きました.


float a = 2.999;
int b = (int)a;   //gives 2

float a = -2.999;
int b = (int)a;   //gives -2

これは切り捨てとして機能するので、それを使用できますが、未定義の動作につながるコードは使用したくありません。これが定義済みの動作なのか、未定義の動作なのかを尋ねたいと思います。

編集: VS2008 を使用しているため、C++11 については質問していません。

4

2 に答える 2

5

で明確に定義されています。

4.9 浮動整数変換 [conv.fpint]

1浮動小数点型の prvalue は、整数型の prvalue に変換できます。変換は切り捨てられます。つまり、小数部分は破棄されます。切り捨てられた値を変換先の型で表すことができない場合、動作は未定義です。[注:宛先タイプが の場合はbool、4.12 を参照してください。—エンドノート]

于 2013-10-13T13:55:55.417 に答える
2

未定義の動作ではありません。

C++11 §4.9 浮動整数変換 [conv.fpint]

浮動小数点型の右辺値は、整数型の右辺値に変換できます。変換は切り捨てられます。つまり、小数部分は破棄されます。切り捨てられた値を変換先の型で表すことができない場合、動作は未定義です。[ 注: 宛先タイプが bool の場合は、4.12 を参照してください。—終わりのメモ]

于 2013-10-13T13:56:25.090 に答える