C/C++ 中算术运算和转换的机器值

问题描述 投票:0回答:1

我是 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。

c++ c floating-point precision
1个回答
0
投票

例如,我想知道

(double) a * inv_a
的输出是否始终大于或等于 1.000...0 作为 double

使用 IEEE-754 二进制 64(“双精度”)算术,

1./49*49
产生 0.99999999999999988897769753748434595763683319091796875。

© www.soinside.com 2019 - 2024. All rights reserved.