为什么我的代码输出错误的结果?整数溢出?

用户名

假设我们有15个从a [0]到a [14]的数字满足:

a[0]=4
a[i]=pow(sqrt(a[i-1])*2-1, 2) for i>=1 and i<=14

我需要打印出从a [0]到a [14]的所有值,每个数字都在一行上,因此我编写了以下代码(C ++,Code :: Blocks):

#include <iostream>
#include <cmath>
using namespace std;
#define maxN 15
int i[maxN]; int n=15;
int main()
{
    i[0]=2;
    cout<<4<<endl;
    for (int k=1; k<n; k++){
        i[k]=i[k-1]*2-1;
        cout<<pow(i[k],2)<<"\t"<<endl;
    }
    return 0;
}

结果是:

4
9
25
81
289
1089
4225
16641
66049
263169
1.05062e+006
4.1984e+006
1.67854e+007
6.71252e+007
2.68468e+008

最后五个数字不正确(由于整数溢出)。

在上面的“ for”循环中,我更改了

cout<<pow(i[k],2)<<"\t"<<endl;

cout<<(long) pow(i[k],2)<<"\t"<<endl;

这次,结果是:

4
9
24
81
289
1089
4224
16641
66048
263168
1050625
4198400
16785408
67125248
268468224

手动检查后,我意识到许多数字仍然不正确:24;4224; 66048; 263168;4198400;16785408; 67125248;268468224(它们全都比正确数字低1)。我应该怎么做才能解决这个问题?

格扎

我应该怎么做才能解决这个问题?

更改

cout<<pow(i[k],2)<<"\t"<<endl;

cout<<i[k]*i[k]<<"\t"<<endl;

pow是浮点函数,可能不精确。请注意,您的情况有些奇怪:如果pow使用64位IEEE-754双精度,则它应该为您的输入打印准确的数字。因此,也许您使用32位float数字。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的 python 代码输出错误的东西?

我的代码输出错误,我不明白为什么

为什么这会为我提供堆栈溢出错误?

为什么我遇到堆栈溢出错误

为什么我的代码显示错误的输出?

为什么输出错误?

为什么我的“变更计算器”输出错误?

为什么我无法确定GraphQL输出错误?

为什么我的程序输出错误的最高数字?

单击按钮后,为什么我的程序输出错误?

为什么我的方程式给出错误的结果?

为什么在乘以Numpy产品输出时会出现溢出错误?

为什么简单计算的值在Java中给出错误的结果?它会溢出吗?

为什么我的代码会抛出错误消息?

为什么我的SQL代码抛出错误

为什么我的代码为变量给出错误的值?

为什么我的代码会得到错误的Webelements值输出?

为什么我的Python代码显示错误的结果?

为什么我的C代码产生错误的结果?

为什么我的 PHP 代码从 MySQL 查询返回错误的结果?

为什么我的代码给出了错误的结果?

对于此递归代码,为什么Python 2.7不会给出堆栈溢出错误,而3.5会给出堆栈溢出错误?

在这段代码中,为什么在仅输入值为4.2的情况下我只能得到正确的输出,而输出错误呢?

为什么这个乘法整数溢出结果为零?

为什么这段代码不会输出结果?

为什么输出错误的unicode?

为什么标准输出错误消息

为什么Math :: BigInt输出错误?

为什么MomentJS给出错误的结果