将int转换为float / double然后转换回来,总是一样的?

时间:2016-12-09 21:34:31

标签: c++ type-conversion

在c ++中,我有一个整数,我把它转换为float / double,然后我将它转换回整数。两个整数是否始终保证完全相同?假设浮点数的范围覆盖整数的范围。

2 个答案:

答案 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位整数)。

基本上,您感兴趣的系统上整数大小的数字,并确保使用具有足够大的尾数的浮点值。