使用浮点数求级数总和

2023-12-26

我计算了该系列的前 20 个元素 -

有两种方式,第一种 - 向前,第二种 - 向后。为此我做了——

#include <iostream>
#include <math.h>
using namespace std;

float sumSeriesForward(int elementCount) {
    float sum = 0;
    for (int i = 0; i < elementCount; ++i) {
        sum += (float) 1 / (pow(3, i));
    }
    return sum;
}

float sumSeriesBack(int elementCount) {
    float sum = 0;
    for (int i = (elementCount - 1); i >= 0; --i) {
        sum += (float) 1 / (pow(3, i));
    }
    return sum;
}

int main() {
    cout.precision(30);
    cout << "sum 20 first elements - forward: " << sumSeriesForward(20) << endl;
    cout << "sum 20 first elements - back: " << sumSeriesBack(20) << endl;
}

我得到了——

sum 20 first elements - forward: 1.5000001192092896
sum 20 first elements - back: 1.5

有人可以解释一下为什么这两种方式有区别吗?


一般来说,浮点数不能精确地表示值。当您对值进行操作时,错误会传播。在您的示例中,当向后计算时,您将小值添加到更大的数字中,到目前为止小数字的总和很有可能对更大的数字产生影响。另一方面,当你向前计算时,你从大数字开始,较小的数字对它的影响越来越小。也就是说,求和时您总是希望将最小到最大相加。

只需考虑将总和保留在固定位数即可。例如,保留 4 位数字,并将这些数字从上到下、从下到上求和:

values   top to bottom   bottom to top
10.00      10.00            10.01
0.004      10.00            0.010
0.003      10.00            0.006
0.002      10.00            0.003
0.001      10.00            0.001

浮点数的工作方式与此相同,使用固定数量的[二进制]数字。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用浮点数求级数总和 的相关文章

  • 删除文件的最后 10 个字符

    我想删除文件的最后 10 个字符 说一个字符串 hello i am a c learner 是文件内的数据 我只是希望该文件是 hello i am a 文件的最后 10 个字符 即字符串 c learner 应在文件内消除 解决方案 将
  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何从本机 C(++) DLL 调用 .NET (C#) 代码?

    我有一个 C app exe 和一个 C my dll my dll NET 项目链接到本机 C DLL mynat dll 外部 C DLL 接口 并且从 C 调用 C DLL 可以正常工作 通过使用 DllImport mynat dl
  • 如何在 C++ 中标记字符串?

    Java有一个方便的分割方法 String str The quick brown fox String results str split 在 C 中是否有一种简单的方法可以做到这一点 The 增强分词器 http www boost o
  • C++ 多行字符串原始文字[重复]

    这个问题在这里已经有答案了 我们可以像这样定义一个多行字符串 const char text1 part 1 part 2 part 3 part 4 const char text2 part 1 part 2 part 3 part 4
  • WPF 数据绑定到复合类模式?

    我是第一次尝试 WPF 并且正在努力解决如何将控件绑定到使用其他对象的组合构建的类 例如 如果我有一个由两个单独的类组成的类 Comp 为了清楚起见 请注意省略的各种元素 class One int first int second cla
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • LINQ:使用 INNER JOIN、Group 和 SUM

    我正在尝试使用 LINQ 执行以下 SQL 最接近的是执行交叉联接和总和计算 我知道必须有更好的方法来编写它 所以我向堆栈团队寻求帮助 SELECT T1 Column1 T1 Column2 SUM T3 Column1 AS Amoun
  • C# 动态/expando 对象的深度/嵌套/递归合并

    我需要在 C 中 合并 2 个动态对象 我在 stackexchange 上找到的所有内容仅涵盖非递归合并 但我正在寻找能够进行递归或深度合并的东西 非常类似于jQuery 的 extend obj1 obj2 http api jquer
  • 编译时展开 for 循环内的模板参数?

    维基百科 here http en wikipedia org wiki Template metaprogramming Compile time code optimization 给出了 for 循环的编译时展开 我想知道我们是否可以
  • C# 中的 IPC 机制 - 用法和最佳实践

    不久前我在 Win32 代码中使用了 IPC 临界区 事件和信号量 NET环境下场景如何 是否有任何教程解释所有可用选项以及何时使用以及为什么 微软最近在IPC方面的东西是Windows 通信基础 http en wikipedia org
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • C++ 中的参考文献

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 现代编译器是否优化乘以 1 和 -1

    如果我写 template
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 修改对象的键而不创建新对象[重复]

    这个问题在这里已经有答案了 我有以下输入 foo 4 bar 3 我想修改这个对象的键以获得 x foo y 4 x bar y 3 是否可以修改对象而不创建新对象 可用 jQuery 是的 您只需添加新密钥并删除旧密钥即可 obj x f
  • 为什么我们不能像其他模式对象一样删除引用的类型

    When a Type尝试删除或替换有依赖项的情况下 oracle 会抛出以下错误 与其他模式对象 如过程 不同 在其他模式对象中 您删除一个对象 然后它就会被删除 并且依赖对象也会被删除invalid 我的两个问题是 1 为什么是Type
  • 在 Sqlite 中存储 NSMutableArray

    我有一个 NSMutableArray 其中包含多个 CGRect 的坐标和大小 我想将其存储到 sqlite 中 是否可以存储整个数组 或者我应该将 CGRect 手动存储在数据库中 UPDATE 这是我从数据库检索到的数据 62706c
  • 为什么原始数据类型可以在不包含 System 命名空间的情况下工作?

    我读到所有原语都属于System命名空间 如果我评论掉using System我预计我的程序中会出现构建错误 但它运行成功 为什么是这样 这是因为int是一个别名System Int32 并且由于 Int32 已经以其名称空间为前缀 即 完
  • 如何捕获 C 函数调用的 Haskell 回调函数中引发的 Haskell 异常?

    有没有什么好方法来捕获由c函数调用的haskell回调函数中引发的haskell异常 例如 让我有一个简单的 c 函数 它只调用给定的回调 void callmeback void callback callback 以及通过 ffi 使用
  • 在Linux和Windows机器上使用C++调度任务

    我正在开发网关模拟器应用程序 网关将视频流式传输到客户端 网关模拟器可以模拟 1000 个网关 用户可以发出命令 例如 1 小时后开始录制并录制长达 1 小时 或者可以流式传输视频5点钟 所以基本上安排了任务 该网关将在 Windows 和
  • 带 Y 组合器的列表函数没有递归,为什么?

    注意 这是一种家庭作业 而不是一种家庭作业 最终目标是拥有一个函数 该函数生成一组数字的幂集 以数字列表的形式提供给该函数 我有该函数的递归版本 但我现在需要找到一些方法来替换我拥有的解决方案中的每个显式递归函数 append mapm等
  • 64 位计算机上的 32 位程序不会因 NullReferenceException 而崩溃

    我有一段代码抛出一个NullReferenceException dataSource DataSource GetView 它抛出是因为dataSource is null GetView返回一个DataTable 但是 当在一台计算机
  • Ruby 中的一行 if 语句

    我有以下代码 if day gt 31 day 31 month April end 我可以把它写在一行中 而不是 if day gt 31 then day 31 and month April end 我试过这样 if day gt 3
  • 使用VideoJS播放器播放RTMP流

    我正在尝试玩RTMP流式传输VideoJS玩家 下面是我的代码
  • Wildfly 9 http 转 https

    我想将请求从 HTTP 重定向到 HTTPS 我正在使用 Wildfly 9 经过谷歌搜索后 我发现了以下内容 但它不起作用 我希望有人
  • 如何在 Java 中将 BigInteger 值转换为十六进制

    我正在制作一个Java程序 我有一个 BigInteger 数字 我需要将其转换为十六进制 我尝试了以下代码 String dec null System out println Enter the value in Dec Buffere
  • 更改特定数据的颜色

    我想更改 json 文件中某些数据的颜色 如果我有一个包含日期的数据集 并且我想要 2017 年的日期为浅粉色 我怎样才能在不影响2018年 2019年等的情况下实现这一目标 日期 json文件 id 1 month 2017 03 01
  • 大型 XML 文件和分页,可能吗?

    问题 当在您的计算机上本地打开非常大的 XML 文件时 几乎可以肯定的是 该文件需要一段时间才能打开 这通常意味着您的计算机因认为没有响应而被锁定 如果您为用户提供他们使用的相当复杂的数据库或系统的 XML 备份 这就是一个问题 他们能够打
  • WPF - 如何保存没有任何 Alpha 通道的 PNG?

    我有一个BitmapSource 我将它保存为像这样的png PngBitmapEncoder enc new PngBitmapEncoder enc Frames Add myBitmapSource enc Save fs 如何在没有
  • C 中自动 stdout 缓冲区刷新的规则是什么?

    我只是好奇应该满足哪些条件才能自动刷新标准输出缓冲区 首先 我很困惑这个伪代码不会在每次迭代时打印输出 while 1 printf Any text sleep 1 但如果我添加换行符 它就会 经过几次实验 我发现在我的机器上标准输出缓冲
  • 用 C++ 模拟 CPU 负载

    我目前正在使用 C 在 Windows 中编写一个应用程序 我想模拟 CPU 负载 我有以下代码 void task1 void param unsigned elapsed 0 unsigned t0 while 1 if t0 cloc
  • 批处理文件检查具有相同扩展名的文件

    所以我不太擅长代码 我有一个代码可以检查扩展名文件的大小 txt我需要它来验证具有该扩展名的所有文件 如果大于 限制 则写入一个 例如 size txt里面是超出大小限制的文件的名称 我已经拥有并给我的代码是 它没有写入文件的部分size
  • Spring Flux 和 Async 注解

    我有一个 Spring Flux 应用程序 在某些时候我需要在后台执行一些繁重的任务 调用者 HTTP 请求 不需要等到该任务完成 如果没有反应堆 我可能会使用Async https docs spring io spring framew
  • 使用浮点数求级数总和

    我计算了该系列的前 20 个元素 有两种方式 第一种 向前 第二种 向后 为此我做了 include