c++ - 由于 float 和 double 的精度有限而导致的错误

标签 c++ floating-accuracy double-precision

在C++中,由于float和double的精度有限,我使用下面的代码计算出误差的数量级:

 float n=1;
 float dec  = 1;

 while(n!=(n-dec)) {
    dec = dec/10;
 }
 cout << dec << endl;

(在 double 情况下,我所做的只是在第 1 行和第 2 行中将 float 与 double 交换)

现在,当我在 Unix 系统上使用 g++ 编译并运行它时,结果是

Float  10^-8
Double 10^-17

但是,当我在 Windows 7 上使用 MinGW 编译并运行它时,结果是

Float  10^-20
Double 10^-20

这是什么原因?

最佳答案

我想我会将我的评论作为答案并对其进行扩展。 这是我的假设,我可能是错的。

Windows 上的 MinGW 可能试图通过将表达式的中间值提升到 x86 的完整 80 位精度来保持精度。

因此,表达式 n != (n-dec) 的两边都计算为 64 位精度(80 位 FP 具有 64 位尾数)。

2^-64 ~ 10^-20

所以这些数字是有道理的。

Visual Studio 也(默认情况下)将提升中间体。但仅限于 double 。

关于c++ - 由于 float 和 double 的精度有限而导致的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7702177/

相关文章:

c 改变 double 的指数

java - 新的 BigDecimal(双)与新的 BigDecimal(字符串)

C++:使用 pthread_create 创建新线程,以运行类成员函数

c++ - 如何在 C++ 中检查给定 "KEY"的映射中是否存在 "VALUE"

math - float 学有问题吗?

java - 在 Java 中操作和比较 float

c++ - 处理两个彼此接近的 double 相减时的精度损失

c++ - 了解 openCV 中的特定行

c++ - 使用虚拟析构函数会使非虚拟函数进行 v 表查找吗?

python - 大于或等于 float 失败