将int转换为float/double,然后将其转换回,始终相同

Convert int to float/double and then convert back, always same?

本文关键字:转换 然后 float double int      更新时间:2023-10-16

在C 中,我有一个整数,将其转换为float/double,然后将其转换回整数。两个整数是否总是完全相同?假设浮数范围涵盖了整数数字的范围。

作为具体反例,表明float

并非总是如此
#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

不一定是,如果您使用32位整数和32位float(这是相当典型的),则可能会在整数转换为浮子(通常,浮点只有24位可以存储实际的数字(Mantissa))。

但是,由于C中基本类型的确切大小并不是严格定义,因此此转换可能有效(例如,如果将浮子存储为32位的64位和整数)。

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

相关文章: