Stream2005cumtb 2023-09-14 09:46 采纳率: 28.6%
浏览 24
已结题

递归解决小球落地问题

为什么第二个%g输出有误差,没有在小数位上四舍五入,第一个递归是算法上出了问题,还是每一次计算都有误差导致的呢?

img

img

img

img

img

  • 写回答

15条回答 默认 最新

  • Leodong. 2023-09-14 09:55
    关注
    获得0.45元问题酬金

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:

    在你的代码中,存在以下问题:

    1. 输出格式问题:你使用了"%lf"来格式化输出double类型的值,但是应该使用"%g"来输出,与题目要求一致。

    2. 误差问题:第二个输出结果可能存在误差,这是由于浮点数的表示和计算精度限制所导致的。浮点数在计算机中以二进制表示,有些十进制小数无法精确表示,因而可能存在舍入误差。这是计算机浮点数运算的普遍问题。

    针对这些问题,你需要进行以下修改:

    #include <stdio.h>
    #include <math.h>
    
    double sum(int x, int y);
    
    int main() {
        int n;
        double answer1, answer2;
        scanf("%d", &n);
        answer1 = n / (1024.0);
        printf("%g\n", sum(n, 10));
        answer2 = n * pow(0.5, 10);
        printf("%g", answer2);
        return 0;
    }
    
    double sum(int x, int y) {
        double c;
        if (y == 1)
            c = (double)x;
        else
            c = 2 * x * pow(0.5, y) + sum(x, y - 1);
        return c;
    }
    

    在修改后的代码中,我进行了以下更改:

    1. 将输出格式"%lf"改为"%g",以符合题目要求。

    2. 添加了对第10次弹跳高度的计算(answer2),并使用"%g"格式化输出。

    请注意,浮点数计算存在舍入误差是正常的,而且在输出时不需要对精度特殊控制。使用"%g"格式化输出即可满足要求。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月22日
  • 赞助了问题酬金15元 9月14日
  • 创建了问题 9月14日

悬赏问题

  • ¥17 pro*C预编译“闪回查询”报错SCN不能识别
  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?