在c ++中,我有一个整数,我把它转换为float / double,然后我将它转换回整数。两个整数是否始终保证完全相同?假设浮点数的范围覆盖整数的范围。
答案 0 :(得分: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;
}
在我的系统输出
上2147483647
2.14748e+09
-2147483648
2.14748e+09
2147483647
答案 1 :(得分:1)
不一定,如果您正在使用32位整数和32位浮点(这是相当典型的),您可能会在从整数到浮点的转换之间出现一些舍入误差(通常是float只有24位来存储实际数字(尾数)。)
但是,由于C中基本类型的确切大小未严格定义,因此可以进行此转换(例如,如果浮点数存储为64位,32位整数)。
基本上,您感兴趣的系统上整数大小的数字,并确保使用具有足够大的尾数的浮点值。