所以,今天我有更多的理论问题。在研究浮点类型时,我写了一点测试:
#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;
}
结果并非我的预期:
现在,我知道浮点数是由尾数和指数构成的,所以对于我来说,float
类型的情况很自然,标准保证精度高达7位尾数将是比如3.333333
,指数的值例如是37
,所以我基本上不知道这些随机垃圾数字来自哪里。我还观察了另外一件事。虽然float
失去精度后有大量的这些随机数字,但在double
精度损失后只有一个随机数字。我觉得这很奇怪。
现在的问题是:
与标题相同,为什么浮点数中有随机垃圾数字? C ++是否试图以某种方式计算这个重复小数的另一部分,或者它只是尾数的问题还是其他的东西?
我真的很无能为力,在哪里寻找合适的答案。我唯一发现的是IEEE 754标准,但如果我想阅读AFAIK,我需要购买它。