为什么我无法在下面的代码中为浮点变量添加值?

sha*_*yan 0 c++

using namespace std;
int main()
{
    float f1 = 5488955, f2 = 0.2197265620, f3 = 0;
    f3 = f1 + f2;
    f3 = f3 - f1;
    cout << f3<<endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么 f3 值被打印为 0 而不是 0.2197265620

And*_*zel 5

IEEE-754浮点格式已经精度的限制。双精度浮点数比单精度浮点数具有更高的精度,因为它们使用 64 位而不是仅 32 位。

浮点数5488955.2不能用单精度浮点数表示。它可以表示的最接近的数字是5488955.05488955.5。因此四舍五入为5488955.0。为了防止这种舍入,您必须使用双精度浮点数,通过使用数据类型double而不是float.

但是,对于非常高的数字,您迟早会遇到相同的问题double。因此,如果您需要任意精度,则不能使用floatdouble,而必须使用特殊的任意精度软件库。但对于大多数情况,double应该就足够了。