最近我遇到了一些奇怪的事情,我很难理解。
基本上,我试着估计过去2014年的秒数。然而,我得到的结果是负数。起初,我认为这是某种溢出,因为双浮点变量的大小限制,但是在研究之后,情况似乎并非如此。因此,我开始使用以下代码:
double test = 1.8*pow(10,308);
cout << test << endl;
test = 1.7*pow(10,308);
cout << test << endl;
test = 2*1000000000;
cout << test << endl;
test = 2*100*100*100*100*100;
cout << test << endl;
test = 1*1000000000;
cout << test << endl;
test = 1*100*100*100*100*100;
cout << test << endl;这将返回以下输出:
inf
1.7e+308
2e+009
-1.47484e+009
1e+009
1.41007e+009前两个结果对我来说是有意义的。我的印象是,1.7e+308是最大可能的值,可以存储在一个双,这意味着1.8e+308不能工作-所以编译器解释为无穷大?然而,在那之后,事情变得有点混乱。
我不明白为什么2*10000000000和2*100*100*100*100*100 *100返回不同的值?
或者为什么1*10000000000和1*100*100*100*100*100 *100不返回相同的值?
我也不明白为什么2*100*100*100*100*100 *100*100返回负值?
还有1.4条在哪里..。当我只玩1或2的时候?
如果有人能帮助我更好地理解这一点,我们将不胜感激!
发布于 2014-04-02 14:12:31
除前两个外,所有这些都在执行整数运算,然后将整数结果转换为double。奇怪的值是整数溢出的结果(这会给出未定义的行为)。例如,如果使用浮点常量,就应该得到预期的结果。
test = 2. * 100. * 100. * 100. * 100. * 100.;https://stackoverflow.com/questions/22814140
复制相似问题