首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++双大小/溢出问题

C++双大小/溢出问题
EN

Stack Overflow用户
提问于 2014-04-02 14:09:27
回答 1查看 1.1K关注 0票数 0

最近我遇到了一些奇怪的事情,我很难理解。

基本上,我试着估计过去2014年的秒数。然而,我得到的结果是负数。起初,我认为这是某种溢出,因为双浮点变量的大小限制,但是在研究之后,情况似乎并非如此。因此,我开始使用以下代码:

代码语言:javascript
运行
复制
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;

这将返回以下输出:

代码语言:javascript
运行
复制
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的时候?

如果有人能帮助我更好地理解这一点,我们将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-02 14:12:31

除前两个外,所有这些都在执行整数运算,然后将整数结果转换为double。奇怪的值是整数溢出的结果(这会给出未定义的行为)。例如,如果使用浮点常量,就应该得到预期的结果。

代码语言:javascript
运行
复制
test = 2. * 100. * 100. * 100. * 100. * 100.;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22814140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档