为什么浮点数中有随机垃圾数字?

时间:2013-12-21 16:21:12

标签: c++ floating-point floating-point-precision

所以,今天我有更多的理论问题。在研究浮点类型时,我写了一点测试:

#include <iostream>

int main()
{
    float floatTest = 10.0 / 3.0;
    double doubleTest = 10.0 / 3.0;

    const long long ex = 100000000000;

    std::cout.setf(std::ios_base::fixed, std::ios_base::floatfield);
    std::cout << "float test: " << floatTest * ex << std::endl;
    std::cout << "double test: " << doubleTest * ex << std::endl << std::endl;

    return 0;
}

结果并非我的预期:

enter image description here

现在,我知道浮点数是由尾数和指数构成的,所以对于我来说,float类型的情况很自然,标准保证精度高达7位尾数将是比如3.333333,指数的值例如是37,所以我基本上不知道这些随机垃圾数字来自哪里。我还观察了另外一件事。虽然float失去精度后有大量的这些随机数字,但在double精度损失后只有一个随机数字。我觉得这很奇怪。

现在的问题是:

与标题相同,为什么浮点数中有随机垃圾数字? C ++是否试图以某种方式计算这个重复小数的另一部分,或者它只是尾数的问题还是其他的东西?

我真的很无能为力,在哪里寻找合适的答案。我唯一发现的是IEEE 754标准,但如果我想阅读AFAIK,我需要购买它。

0 个答案:

没有答案
相关问题