gpt4 book ai didi

C++ Double size/溢出问题

转载 作者:行者123 更新时间:2023-11-27 23:07:12 28 4
gpt4 key购买 nike

我最近遇到了一些我无法理解的怪事。

基本上,我试图估算过去 2014 年过去的秒数。但是,我得到的结果是负数。起初我认为这是由于 double 浮点变量的大小限制导致的某种溢出,但在调查之后似乎并非如此。所以我开始尝试使用以下代码:

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 是可以存储在 double 中的最大可能值,这意味着 1.8e+308 不起作用 - 所以编译器将其解释为无穷大?然而在那之后事情变得有点困惑。

我不明白为什么 2*10000000000 和 2*100*100*100*100*100 返回不同的值?

或者为什么 1*10000000000 和 1*100*100*100*100*100 不返回相同的值?

我也不明白为什么 2*100*100*100*100*100 返回负值?

此外,当我仅以 1 或 2 进行多人游戏时,1.4... 来自哪里?

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

最佳答案

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

test = 2. * 100. * 100. * 100. * 100. * 100.;

关于C++ Double size/溢出问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22814140/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com