2016-12-09 7 views
1

C++では整数を持ち、float/doubleに変換して整数に変換します。 2つの整数は常に同じであることが保証されていますか?浮動小数点数の範囲が整数の範囲をカバーしているとします。intをfloat/doubleに変換した後、常に同じに変換しますか?

+3

整数として。 –

+0

それはそれを元に戻す方法によって異なります。 int(float_version + 0.5)==オリジナル_int。 int(float_version)はそうではないかもしれません。 – goldcode

答えて

1

必ずしも32ビット整数と32ビット浮動小数点(これはかなり一般的です)を使用している場合、整数から浮動小数点への変換の間に何らかの丸め誤差が生じる可能性があります実際の数(仮数)を格納するのに24ビットしか持たない。

しかし、Cの基本型の正確なサイズは厳密には定義されていないので、この変換が可能です(例えば、floatが64ビットと32ビットの整数として格納されている場合)。

基本的には、関心のあるシステムで整数のサイズを表し、十分に大きな仮数で浮動小数点値を使用するようにしてください。

2

具体的な反例として、それは常に私のシステム出力のフロート

#include <iostream> 
#include <limits> 

int main(){ 
    int x = std::numeric_limits<int>::max(); 
    float f = x; 
    int xf = f; 
    double d = x; 
    int xd = d; 

    std::cout << x << '\n' 
       << f << '\n' 
       << xf << '\n' 
       << d << '\n' 
       << xd << std::endl; 

    return 0; 
} 

の場合ではありません表示するフロートの仮数部は、/ doubleとして多くのビットを持っている場合のみ

2147483647 
2.14748e+09 
-2147483648 
2.14748e+09 
2147483647 
+0

これらのキャストは必要ありません。 'std :: endl'もありません。 '' \ n ''は' std :: endl'が行う余分なものを一切使わずに行を終了します。 –

関連する問題