c++ - 0.1 float 大于 0.1 double。我以为是假的

标签 c++ c floating-point double rounding

让:

double d = 0.1;
float f = 0.1;

应该表达

(f > d)

返回 true 还是 false?

根据经验,答案是true。但是,我希望它是 false

由于 0.1 不能完美地用二进制表示,而 double 有 1516 十进制数字精度,而 float 只有 7。因此,它们都小于 0.1,而 double 更接近 0.1

我需要对 true 的确切解释。

最佳答案

我想说答案取决于将 double 转换为 float 时的舍入模式。 float 有 24 位 binary 位精度,而 double 有 53 位。在二进制中,0.1 是:

0.1₁₀ = 0.0001100110011001100110011001100110011001100110011…₂
             ^        ^         ^   ^ 
             1       10        20  24

因此,如果我们在第 24 位处 向上取整,我们将得到

0.1₁₀ ~ 0.000110011001100110011001101

大于精确值和更精确的 53 位近似值。

关于c++ - 0.1 float 大于 0.1 double。我以为是假的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292283/

相关文章:

python - SWIG - 映射 C++ 右移和左移运算符

c++ - 将指针类型传递给模板参数

c# - Linux 无法读取 BitConverter.GetBytes() 编码的整数

ruby-on-rails - Ruby float 学 - Sum Calc 中的精度问题

c - 将常量值传递给函数

c++ - 覆盖 std :exception 的析构函数

c++ - 遍历 map 并删除元素

c++ - linux下c/c++的加密库和压缩库

c - Linux操作系统如何在有多个套接字时调度线程

c - 这个 fabs() 的实现是如何工作的?