一个c++小程序的bug

39关注776浏览

我写了一个求x^3在区间(0,1)上的积分的小程序,将区间分为n等分,用矩形法求和。理论积分值应该为0.25,当n较小时(100)结果还比较准确,但当n较大时(1000)结果就飙到了负几百,百思不得

展开全部
收起
3回答
提交回答
  • 至过去的我

    2044人对此回答表示赞同

    我是未来的你,你现在是不是在年找寻小程序答案。你不要感觉诧异,给你来信原因,就是让你不在后悔。今天去学习如何推广小程序,相信......点击查看更多>
    发布于
  • Cooper55

    16人对此回答表示赞同

    算法本身没有错,是C++整型范围越界的问题。
    float ele=float(k*k*k)/(n*n*n*n);
    这里面的n*n*n*n仍然是整型,当n=1000时,四次方后是10的12次方,超出了C++中整型的范围,溢出后为变为负值。
    解决的办法是修改表达式让运算结果自动转为浮点型就可以了。如
    float ele=float(k*k*k)/((float)n*n*n*n); 或 float ele=float(k*k*k)/n/n/n/n; 都可以。
    展开
    16
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • 有无

    10人对此回答表示赞同

    你看下那个网页,变量类型有个取值范围,超过最大值系统不会报错,但是值是不对的。
    int是有符号的,超过最大值会将首位变为一,显示出来就是负数。
    这个可以看原码,反码,补码等数值存储方式。

    参考资料:

    展开
    10
    0回复
    发布于 6年前

    评论(0)

    收起评论

  • Gracia

    3人对此回答表示赞同

    应该是溢出了,你用double型应该就行了。
    #include <iostream.h>
    int main()
    {
    double n;
    cin>>n;
    double integral=0;
    for(int k=1;k<=n;k++)
    {
    double ele=double(k*k*k)/(n*n*n*n);
    integral+=ele;
    }
    展开
    3
    0回复
    发布于 6年前

    评论(0)

    收起评论

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
咨询热线

13312967497

扫码添加业务即可随时咨询 还可领取小程序推广攻略

业务咨询: 13312967497
扫码咨询

扫码咨询套餐

回到顶部