浮点常量值因C++声明方式而异(Xcode IDE)

Float constant value different depending upon how it's declared C++ (Xcode IDE)

本文关键字:Xcode IDE 方式 C++ 声明 浮点常量      更新时间:2023-10-16

我正在使用c++ Primer Plus,使用Xcode作为我的IDE,其中一个练习要求将值0.0254分配给符号常数(将英寸转换为米)。问题是,当我声明常量时,我得到的值是0.0253999997。我像下面这样声明这个常量。

#include <iostream>
const float METERS_PER_INCH = .0254;

这是由于浮点数在以2为基数的数字系统中存储数字而导致的舍入误差问题(想想我们如何在以10为基数的数字系统中不舍入就不能写出1/3)。它会导致小的舍入误差,就像您在存储非2进制数时看到的那样。

解决方案是使用整数或bignum库(我建议使用GNU多精度库)。大数字库使用整数精确地存储任意精度的数字。

别担心,你的mac没问题。

问题是计算机不能准确地表示浮点数和双精度数,所以这就是你在这里看到的。

为什么比较double和float会导致意想不到的结果?

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

浮点数与浮点文字

比较的奇怪输出

Google是你的朋友!