You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用C程序从右向左计算交错级数之和并修复结果为0的问题

交错级数从右向左求和结果异常修复

你需要计算的是前10000项交错调和级数的和:

1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + ... + 1/9999 - 1/10000
该和的理论值约为ln2≈0.693。

原右向左求和代码的错误点

  • 循环条件完全写反:原代码循环判断条件为i<1,初始i值为10000,判断直接不成立,循环体一次都不会执行,result始终为初始值0.0,最终输出必然是0.000000,正确的循环终止条件应为i >= 1。
  • 符号逻辑冗余易错:原代码用flag变量来回翻转符号,初始值设置如果和遍历顺序不匹配就会出现符号全错的问题,直接根据项数i的奇偶判断符号更稳妥:i为偶数时对应项是-1/i,i为奇数时对应项是+1/i,不需要额外flag变量。

修正后的可运行代码

#include <stdio.h>

int main() {
    float result = 0.0f;
    for (int i = 10000; i >= 1; --i) {
        if (i % 2 == 0) {
            result -= 1.0f / i;
        } else {
            result += 1.0f / i;
        }
    }
    printf("Addition from right to left accumulated in float: %f\n", result);
    return 0;
}

额外说明:浮点数累加时从小到大累加(即从右向左计算这个级数)的精度会高于从大到小累加(从左向右计算),因为大值累加完成后,过小的尾数会因为float的23位有效位限制被截断,造成精度损失。

内容的提问来源于stack exchange,提问作者zion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 05:57:12