C++では整数を持ち、float/doubleに変換して整数に変換します。 2つの整数は常に同じであることが保証されていますか?浮動小数点数の範囲が整数の範囲をカバーしているとします。intをfloat/doubleに変換した後、常に同じに変換しますか?
1
A
答えて
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'が行う余分なものを一切使わずに行を終了します。 –
関連する問題
- 1. intをcharに変換しますか?
- 2. charをintに変換しますか?
- 3. 即時変換で同じ変換をしていますか?
- 4. intに変換する前にnullフィールドをゼロに変換しますか?
- 5. オブジェクトをintに変換します
- 6. char crをintに変換します
- 7. intをnullable intに変換しますか?
- 8. ハスケルで[IO Int]をIO [Int]に変換しますか?
- 9. doubleをint型に変換した文字列に変換する
- 10. const intに変換
- 11. intを文字列に変換してからintに戻す
- 12. longを2 intに変換し、逆も同様です
- 13. varchar値 '7:00'をデータ型intに変換するときに変換に失敗しました
- 14. nvarchar値 'ABC113973'をデータ型intに変換するときに変換に失敗しました
- 15. "nvarchar値 '113332,113347'をデータ型intに変換するときに変換に失敗しました。
- 16. varchar値 'LAST1、FIRST1'をデータ型intに変換するときに変換に失敗しました
- 17. nvarcharの値 'quiz.jpg'をデータ型intに変換するときに変換に失敗しました
- 18. varchar値をint型に変換するときに変換に失敗しました
- 19. Laravelが "nvarchar値 '[]'をデータ型intに変換するときに変換に失敗しました"
- 20. SSMS 2008 varchar値 '2.126'をデータ型intに変換するときに変換に失敗しました
- 21. nvarchar値 'B'をデータ型intに変換するときに変換に失敗しました
- 22. varchar値 '' .... "'をデータ型intに変換するときに変換に失敗しました
- 23. varchar値 'xxx'をデータ型intに変換するときに変換に失敗しました
- 24. varchar値 'N'をデータ型intに変換するときに変換に失敗しました
- 25. エラー:varchar値 '、'をデータ型intに変換するときに変換に失敗しました
- 26. cstringまたはstringをintに変換します
- 27. intをパーセントまたは小数点に変換します。
- 28. intをintに変換する
- 29. ANdroid NDKでバイトをintに変換し直しますか?
- 30. スイフト:インデックスをintに変換
整数として。 –
それはそれを元に戻す方法によって異なります。 int(float_version + 0.5)==オリジナル_int。 int(float_version)はそうではないかもしれません。 – goldcode