我是 C/C++ 编程新手。我想知道 C/C++ 中以下简单操作的结果会获得什么可能的机器值:
int a = 3;
double inv_a;
inv_a = (double) 1 / (double) a;
std::cout << "a*(1/a) = " << std::setprecision(30) << (double) a * inv_a << std::endl;
例如,我想知道
的输出是否(double) a * inv_a
对于 a 的任何可能的 int 值,作为双精度值始终大于或等于 1.000...0。是否有可能获得严格小于 1 但非常接近它的值,例如 0.999...?当我将结果转换为 int 时,我正在考虑这个问题。预先感谢您。
我的实验总是给我准确的1。
例如,我想知道
的输出是否始终大于或等于 1.000...0 作为 double(double) a * inv_a
使用 IEEE-754 二进制 64(“双精度”)算术,
1./49*49
产生 0.99999999999999988897769753748434595763683319091796875。