大浮点和的精度

2024-04-13

我正在尝试对正递减浮点数的排序数组求和。我发现对它们求和的最佳方法是开始从最低到最高将数字相加。我编写此代码是为了提供一个示例,但是,从最高数字开始的总和更精确。为什么? (当然,1/k^2之和应该是f=1.644934066848226)。

#include <stdio.h>
#include <math.h>

int main() {

    double sum = 0;
    int n;
    int e = 0;
    double r = 0;
    double f = 1.644934066848226;
    double x, y, c, b;
    double sum2 = 0;

    printf("introduce n\n");
    scanf("%d", &n);

    double terms[n];

    y = 1;

    while (e < n) {
        x = 1 / ((y) * (y));
        terms[e] = x;
        sum = sum + x;
        y++;
        e++;
    }

    y = y - 1;
    e = e - 1;

    while (e != -1) {
        b = 1 / ((y) * (y));
        sum2 = sum2 + b;
        e--;
        y--;
    }
    printf("sum from biggest to smallest is %.16f\n", sum);
    printf("and its error %.16f\n", f - sum);
    printf("sum from smallest to biggest is %.16f\n", sum2);
    printf("and its error %.16f\n", f - sum2);
    return 0;
}

您的代码创建一个数组double terms[n];在堆栈上,这对程序崩溃之前可以执行的迭代次数设置了严格限制。

但您甚至没有从该数组中获取任何内容,因此根本没有理由将其放在那里。我修改了你的代码以摆脱terms[]:

#include <stdio.h>

int main() {

    double pi2over6 = 1.644934066848226;
    double sum = 0.0, sum2 = 0.0;
    double y;
    int i, n;

    printf("Enter number of iterations:\n");
    scanf("%d", &n);

    y = 1.0;

    for (i = 0; i < n; i++) {
        sum += 1.0 / (y * y);
        y += 1.0;
    }

    for (i = 0; i < n; i++) {
        y -= 1.0;
        sum2 += 1.0 / (y * y);
    }
    printf("sum from biggest to smallest is %.16f\n", sum);
    printf("and its error %.16f\n", pi2over6 - sum);
    printf("sum from smallest to biggest is %.16f\n", sum2);
    printf("and its error %.16f\n", pi2over6 - sum2);
    return 0;

}

当运行十亿次迭代时,最小优先方法要准确得多:

Enter number of iterations:
1000000000
sum from biggest to smallest is 1.6449340578345750
and its error 0.0000000090136509
sum from smallest to biggest is 1.6449340658482263
and its error 0.0000000009999996
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大浮点和的精度 的相关文章

随机推荐

  • 反射无法找到抽象类属性的私有设置器

    当我在抽象类中拥有此属性时 public IList
  • Ajax IndexedDB 删除当前成功上传

    我昨天发布了类似的内容 但它有效 但只删除了数据中的最后一个对象 我想要发生什么 这个ajax上传将处理大量数据 所以我使用indexeddb 这也将在手机上使用 因此 我希望它一次上传一项 如果一项失败 则仅删除数据中的前一项 这样他们就
  • Jest 在没有 webpack 的情况下配置 typescript

    好吧 我正在用 typescript 编写一些 NPM 模块 但我没有使用 Webpack 来编译脚本 我应该如何配置 jest 才能使用打字稿文件正确运行 test spec ts import calc from index test
  • 如何在集合中进行隐式转换?

    假设我有一个隐式转换 implicit def aToB a A B 如何让这种隐式转换适用于列表的元素 如果我有 val listOfA List A 我有一个接受 B 列表的函数 是否可以让 Scala 将所有元素从 A 隐式转换为 B
  • 如何清除EditText的焦点?

    我有一个带有搜索框的活动 EditText 位于顶部 ListView 位于下方 每当活动启动时 EditText 始终具有焦点并调出键盘 该键盘部分覆盖了ListView 没有其他文本视图可以获得焦点 我希望 EditText 仅在用户触
  • 通过 PowerShell 在远程计算机上设置环境变量

    我正在尝试通过 TFS Releasemanagement 通过调用 powershell 脚本来设置环境变量 该脚本应该在计算机上打开远程会话并设置环境变量 param Parameter Mandatory true String Re
  • 在 iOS 8.3 上测试应用程序时出错:Testflight 无法安装应用程序。此请求有错误

    我将 Xcode 更新到 7 2 我向测试人员发送了一个应用程序版本 一名测试人员出现以下错误 Testflight could not install app There was an error with this request 他的
  • 加入并包含在实体框架中

    我有以下 linq toEntity 查询 问题是它似乎没有加载 标签 关系 即使我已经为其添加了一个东西 如果我不加入标签 它工作正常 但我需要这样做 var items from i in db Items Include Tags f
  • 在 Windows 10 上,pipenv install/pipenv shell 无法与 Git Bash 一起使用

    在使用适用于 Windows 10 的 Git Bash 时 我很难让 Pipenv install 和 Pipenv shell 命令正常工作 使用 powershell 时 我能够成功创建一个新的虚拟环境并使用 Pipenv shell
  • 如何查看 Perforce 中的分支是否包含错误修复?

    我是一个新的 perforce 用户 但过去使用过许多其他源代码控制系统 我们使用变更列表来签入每个错误修复 更改列表注释包含错误 ID 因此可以轻松跟踪错误修复的时间签入分店 但是 我看不到一种简单的方法来查找给定错误修复的所有分支并入
  • 发送自动短信

    首先 我们使用 net sql server 我有一位客户对能够在预定时间发送短信的系统感兴趣 除了通过电子邮件网关发送短信之外 我从未做过类似的事情 例如 电子邮件受保护 cdn cgi l email protection 但是 我认为
  • Python 导入令人头疼

    我有以下目录结构 Main py A init py B init py C init py 文件Main py包含代码 from A import B from B import C The init py文件为空 当我跑步时Main p
  • 对向量元素进行向量化循环

    我发现很难对以下问题提出快速解决方案 我有一个观察向量 它表示观察某些现象的时间 example lt c 0 0 0 1 0 1 1 0 0 0 1 0 0 1 1 0 0 1 0 0 现在我想消除特定观察之间的零 假设某种现象会持续下去
  • 数字输入旋转框CSS代码编译为JSS

    我在转换时遇到问题CSS隐藏数字输入旋转框的代码JSS 我的问题是如何正确转换此代码以使其与 JSS 匹配 input webkit outer spin button input webkit inner spin button webk
  • 围绕图中的点绘制圆圈

    我有两个矩阵 timeline 0 0008 0 0012 0 0016 0 0020 0 0024 0 0028 原始数据 79 8400 69 9390 50 0410 55 5082 34 5200 37 4486 31 4237 2
  • Scala 编译器有哪些特殊类型?

    Scala 非常重视如何将看似语言的功能实现为库功能 是否有该语言特别处理的类型列表 是在规范中还是作为实现细节 例如 这包括优化元组的客场匹配 与模式匹配 推导式 try catch 块和其他语言结构相关的特殊约定又如何呢 String
  • CodeBuild 不报告失败的测试

    我正在使用 CodeBuild 构建我的 NPM 项目 我的构建规范中有一个特定的报告组 并且我正在使用 Jest 和npm test命令 当所有测试通过后 将成功报告给 CodeBuild 报告组 但是 如果其中一项测试失败 我会收到错误
  • 为什么 Google Analytics 不跟踪任何事件?

    我已经实现了几乎标准的示例
  • Azure DevOps - 自定义任务 - 具有 Azure 身份验证的 PowerShell

    到目前为止 我使用 Azure PowerShell 任务在 Azure 上下文中执行 PowerShell 脚本 https learn microsoft com en us azure devops pipelines tasks d
  • 大浮点和的精度

    我正在尝试对正递减浮点数的排序数组求和 我发现对它们求和的最佳方法是开始从最低到最高将数字相加 我编写此代码是为了提供一个示例 但是 从最高数字开始的总和更精确 为什么 当然 1 k 2之和应该是f 1 644934066848226 in