50 次迭代后,常数“pi”的近似值并没有变得更好

2023-12-08

在 R 中我写了这个函数

ifun <- function(m)  {
  o = c() 
  for (k in 1:m) {
    o[k] = prod(1:k) / prod(2 * (1:k) + 1)
    }
  o_sum = 2 * (1 + sum(o))  # Final result

  print(o_sum)
}

该函数近似于常数pi然而,之后m > 50近似值被卡住,即近似值是相同的并且不会变得更好。我怎样才能解决这个问题?谢谢。


我们进去吧:

o <- numeric(100)
for (k in 1:length(o)) {
  o[k] = prod(1:k) / prod(2 * (1:k) + 1)
  }
o
#  [1] 3.333333e-01 1.333333e-01 5.714286e-02 2.539683e-02 1.154401e-02
#  [6] 5.328005e-03 2.486402e-03 1.170072e-03 5.542445e-04 2.639260e-04
# [11] 1.262255e-04 6.058822e-05 2.917211e-05 1.408309e-05 6.814396e-06
# [16] 3.303950e-06 1.604776e-06 7.807016e-07 3.803418e-07 1.855326e-07
# [21] 9.060894e-08 4.429771e-08 2.167760e-08 1.061760e-08 5.204706e-09
# [26] 2.553252e-09 1.253415e-09 6.157124e-10 3.026383e-10 1.488385e-10
# [31] 7.323800e-11 3.605563e-11 1.775874e-11 8.750685e-12 4.313718e-12
# [36] 2.127313e-12 1.049474e-12 5.179224e-13 2.556832e-13 1.262633e-13
# [41] 6.237104e-14 3.081863e-14 1.523220e-14 7.530524e-15 3.723886e-15
# [46] 1.841922e-15 9.112667e-16 4.509361e-16 2.231906e-16 1.104904e-16
# [51] 5.470883e-17 2.709390e-17 1.342034e-17 6.648610e-18 3.294356e-18
# [56] 1.632601e-18 8.092024e-19 4.011431e-19 1.988861e-19 9.862119e-20
# [61] 4.890969e-20 2.425921e-20 1.203410e-20 5.970404e-21 2.962414e-21
# [66] 1.470070e-21 7.295904e-22 3.621325e-22 1.797636e-22 8.924434e-23
# [71] 4.431013e-23 2.200227e-23 1.092630e-23 5.426483e-24 2.695273e-24
# [76] 1.338828e-24 6.650954e-25 3.304296e-25 1.641757e-25 8.157799e-26
# [81] 4.053875e-26 2.014653e-26 1.001295e-26 4.976849e-27 2.473873e-27
# [86] 1.229786e-27 6.113795e-28 3.039627e-28 1.511323e-28 7.514865e-29
# [91] 3.736900e-29 1.858350e-29 9.242063e-30 4.596582e-30 2.286258e-30
# [96] 1.137206e-30 5.656871e-31 2.814078e-31 1.399968e-31 6.965017e-32

print(sum(o[1:49]), digits = 22)
#[1] 0.5707963267948963359544

print(sum(o[1:50]), digits = 22)
#[1] 0.5707963267948964469767

print(sum(o[1:51]), digits = 22)
#[1] 0.570796326794896557999

print(sum(o[1:52]), digits = 22)
#[1] 0.570796326794896557999

之后没有进一步改善51, 因为:

o[51] / o[1]
#[1] 1.641265e-16

o[52] / o[1]
#[1] 8.128169e-17

与第一项相比,其他项太小,很容易超出机器精度可以测量的范围。

.Machine$double.eps
#[1] 2.220446e-16

所以最终你只是添加零。

在这种情况下,总和o已经在数值上收敛,你的近似值也收敛了pi.


更多想法

双精度浮点格式的 IEEE 754 标准规定在 64 位机器上:11 位用于指数,53 位用于有效数字(包括符号位)。这给出了机器精度:1 / (2 ^ 52) = 2.2204e-16。也就是说,一个双精度浮点数最多有16个valid有效数字。 R函数print最多可显示 22 位数字,同时sprintf可以显示更多,但请记住,超过 16 位的任何数字都是无效的,垃圾值.

看看常数pi in R:

sprintf("%.53f", pi)
#[1] "3.14159265358979311599796346854418516159057617187500000"

如果你把它与如何打印 pi 值的小数点后 1000 位?,您会看到只有前 16 位数字是真正正确的:

3.141592653589793

可以采取什么替代措施,以便我可以使用我的方法计算更多数字?

No. 周围有许多疯狂的算法,因此我们可以计算出数量惊人的数字pi,但您无法修改您的方法以获得更有效的有效数字。

一开始我想到的是计算机sum(o[1:51]) and sum(o[52:100])分别,因为它们都给出 16 个有效有效数字。但我们不能只是将它们连接起来就得到 32 位数字。因为对于sum(o[1:51]),第 16 位之后的真实数字不是零,因此 16 位数字sum(o[52:100])不是第17~32位数字sum(o[1:100]).

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

50 次迭代后,常数“pi”的近似值并没有变得更好 的相关文章

  • R 中按时间划分的平均值

    我每秒测量一次化合物浓度 我想求 30 秒和 60 秒的平均值 我一直在阅读这里的帖子 我尝试过lubridate and dplyr 但没有运气 我正在努力完成这项工作 但我一直没能做到 我正在从 SAS 过渡到 R 所以请耐心等待 这是
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • 尝试使用 JRI 将 R 与我的 Java 应用程序集成,但出现错误。谁能解释一下原因和解决办法吗?

    我需要将 Java 与 R 集成来运行一些数学命令并使用 R 的功能进行绘图 以下部分代码给出了错误 public static void main String args HelloRWorld r new HelloRWorld r h
  • 访问或解析 R 中的 summary() 中的元素

    我运行以下 R 命令来进行 Dunnett 测试并获取摘要 如何访问下面线性假设的每一行 这是摘要输出的一部分 基本上我不知道摘要的结构 我尝试使用名称 但它似乎不起作用 因为我没有看到任何命名属性来提供这一点 library multco
  • 如何在 data.table 中分组后使用条件计算行数

    我有以下数据框 dat lt read csv s1 s2 v1 v2 a b 10 20 a b 22 NA a b 13 33 c d 3 NA c d 4 5 NA c d 10 20 dat gt A tibble 6 x 4 gt
  • 在R中循环子文件夹

    我正在 R 环境中包含多个子文件夹的文件夹中工作 我想要循环遍历多个子文件夹 然后在每个子文件夹中调用 R 脚本来执行 我想出了下面的代码 但我的代码似乎添加了 到子文件夹列表 我收到错误 文件中的错误 文件名 r 编码 编码 无效的 描述
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 绘制 Cox 回归的 Kaplan-Meier 图

    我使用 R 中的以下代码设置了一个 Cox 比例风险模型来预测死亡率 添加协变量 A B 和 C 只是为了避免混淆 即年龄 性别 种族 但我们真正对预测变量 X 感兴趣 X 是一个连续变量 cox model lt coxph Surv t
  • 多个动态滤镜更新闪亮

    我希望能够让 UI 输入闪亮 并根据用户之前的选择进行自我更新 因此 在下面的示例中 预期的行为是用户选择cyl vsor carb那么这将 过滤数据集mtcars用于创建绘图 即用户根据过滤条件调整绘图并 更新其他过滤器中的剩余输入选择
  • 为什么 sapply 的缩放速度比样本大小的 for 循环慢?

    假设我想采用向量 X 2 1 N 并将 e 计算为每个元 素的指数 是的 我认识到最好的方法就是通过向量化 exp X 但这样做的目的是将 for 循环与 sapply 进行比较 我通过逐步尝试三种方法 一种使用 for 循环 两种以不同方
  • 如何在 R 中的 for 循环内将值存储在向量中

    我正在开始使用 R 但我对以下问题感到非常沮丧 我试图将 for 循环内完成的某些计算的值存储到我之前定义的向量中 问题是如何进行索引 因为for循环迭代代码的次数取决于用户的输入 所以变量i不一定要从1开始 它可以从80开始 for举个例
  • `as.matrix` 和 `as.data.frame` S3 方法与 S4 方法

    我注意到定义as matrix or as data frame作为 S4 类的 S3 方法 使例如lm formula objS4 and prcomp object 开箱即用 如果它们被定义为 S4 方法 则这不起作用 为什么将方法定义
  • 行对名称中具有特定模式的列求和

    我有一个像这样的数据表 DT lt ata table data table ref rep 3L 4L nb 12 15 i1 c 3 1e 05 0 044495 0 82244 0 322291 i2 c 0 000183 0 155
  • 闪亮的应用程序包:css 和所有 www/ 目录内容

    我正在尝试将 Shiny 应用程序转换为 R 包 但我在处理有关 www 目录以及 松散 文件的所有问题时遇到了问题 我闪亮的应用程序运行得很好 但是当我尝试 打包它 时 它不起作用 我闪亮的应用程序目录 my shiny app R ut
  • 在r中的某个阈值处破坏 cumsum() 函数

    例如我有以下代码 cumsum 1 100 我想打破它 如果一个元素 i 1 大于3000 我怎样才能做到这一点 因此 而不是这个结果 1 1 3 6 10 15 21 28 36 45 55 66 78 91 105 120 136 15
  • 在网格中制作一个矩形图例,并标记行和列

    我有一个 ggplot 我将因子映射到填充和 alpha 如下所示 set seed 47 the data lt data frame value rpois 6 lambda 20 cat1 rep c A B each 3 cat2
  • 在包加载之前如何知道 R 中特定函数属于哪个包?

    例如 我知道许多流行的功能 例如tbl df 我通常不记得它属于哪个包 即data table or dplyr 所以我必须始终记住并加载一个包 但我做不到 tbl df除非我加载了正确的包 在 R 控制台本身加载或安装包之前 有没有办法知
  • data.table 抛出“找不到对象”错误[重复]

    这个问题在这里已经有答案了 我有一个数据表 library data table mydt lt data table index 1 10 当我在全局环境中尝试它时 我可以让它工作 但当我在调试器中或在包测试中使用它时却无法工作 问题是我
  • R:按组,测试一个变量的每个值是否存在于另一个变量中

    我有一个数据框架 结构如下 a lt c 1 1 1 2 2 2 3 3 3 3 4 4 b lt c 1 2 3 1 2 3 1 2 3 4 1 2 c lt c NA NA 2 NA 1 1 NA NA 1 1 NA NA df lt
  • R中IF函数的使用

    我正在短跑ifR 中的函数 但收到以下警告消息 In if runif 50 0 1 lt 0 69 the condition has length gt 1 and only the first element will be used

随机推荐

  • python中大写字母组的分割

    我正在尝试使用大写字母作为分隔符来标记多个字符串 我已经找到了以下代码 token a for a in re split r A Z a z ABCowDog if a print token 正如预期的那样 我得到了回报 A B 牛 狗
  • Ruby:为什么所有坐标都会在数组数组中更新?

    我正在尝试更改特定坐标 但数组正在全部更新 目标是改变fixed属性为单个坐标 class Case attr accessor fixed def initialize self fixed false end def fixed fix
  • 如何使用 javascript 或 Jquery 更改屏幕方向?

    我正在使用 Phonegap 为 Android 和 iphone 开发一个应用程序 当我从一个页面导航到另一页面时 我需要更改屏幕方向 任何人都可以告诉它如何通过 java 脚本或 jquery 来完成吗 谢谢 你可以试试这个 windo
  • 如何使用 python 在 selenium 中加载 chrome 驱动程序中的扩展

    我打开启用了 Browsec 扩展的 Chrome 浏览器的所有努力都失败了 这是我上次尝试过的 Configure the necessary command line option options webdriver ChromeOpt
  • 同一类的多个领域表

    我有一个 RealmObject 类 我想要同一类的多个表 我可以在单个领域 数据库 中执行此操作吗 或者我需要有多个领域 每个领域一个表 如果必须是多个Realm Realm切换过程有多快 我想要同一类的多个表 那么你有两个合理的选择 1
  • JavaScript 在 JSON 对象中递归搜索

    我正在尝试返回 JSON 对象结构中的特定节点 如下所示 id 0 children id 1 children id 2 children 所以这是一个树状的子父关系 每一个node有一个唯一的ID 我正在尝试寻找一个具体的node像这样
  • 查找总和为给定数字的所有可能子集

    我正在学习Python 但我有一个问题 这似乎是一个简单的任务 我想找到总和为给定数字的所有可能的数字组合 例如 4 gt 1 1 1 1 1 1 2 2 2 1 3 我选择生成所有可能的子集 2 n 的解决方案 然后仅生成总和等于数字的子
  • 如何在 Chrome 扩展中的后台脚本之间传递变量值

    我正在开发一个谷歌浏览器扩展 我在我的后台 javascript 文件 example js 之一中为变量设置了一个值 我需要访问该值或将其传递给另一个后台 javascript 文件 extjs js 我该怎么做 有全局变量的概念吗 我的
  • 用于从特定单元格中删除复选框的宏

    我将复选框拉入电子表格 用于选择某些行项目以获得最终成本 不过 还是有一些不需要的复选框被拉入 总共大概有 5 个左右 我可以使用宏来访问这些不需要的复选框的特定单元格 由于我的数据发生变化 这些不需要的复选框并不总是位于同一个位置 因此我
  • 更改(自定义)进度条颜色

    我正在创建一个带有属性的自定义进度条 Public Class CustomProgressBar Inherits ProgressBar Private State As ProgressStates
  • 是什么让 new Date() / 1000 成为有效的 JavaScript?

    我为什么可以用数字 除 一个对象 更新较晚鉴于我的回答包含一些不完整的内容 有时甚至是彻底的内容wrong信息 我认为最好纠正我的错误 虽然晚了 但还是要说 几乎所有的 JS 对象都有 23方法的共同点 valueOf 对于日期对象 它映射
  • 即使出现错误,如何强制创建存储过程?

    当我执行数据库脚本时 我在存储过程中遇到错误 然后它无法创建有错误的存储过程 我想强制创建存储过程 即使存储过程中出现一些错误 如果创建过程语句中发生一些错误 则不会创建存储过程 我想要的是 无论是否发生错误 存储过程都会被创建 实际上我们
  • WPF TreeViewItem 切换按钮可见性

    我遇到了一个问题 希望有人能帮我解决 我遇到过这样的情况 我的节点包含一组可见性设置为 false 的子节点 我希望如果 TreeViewItem 的所有子项都是不可见的 我可以禁用 TreeViewItem 旁边的切换箭头 这可能吗 这是
  • 如何对 Flash 对象使用 display none 和 block?

    我已经嵌入了一些 Flash 如下所示 div style display none div
  • SQL Server 锁定的 DataReader 行为

    当通过 SQL Server 查询返回大型数据集时 我们的数据层会遇到一些问题DataReader 当我们使用DataReader要填充业务对象并将它们序列化回客户端 获取可能需要几分钟 我们正在向用户显示进度 但我们发现受影响的表上正在进
  • JavaScript 是否有集合数据结构的实现?

    我正在寻找 JavaScript 中集合数据结构的合适实现 它应该能够支持纯 JavaScript 对象的元素 到目前为止我只发现闭包库的structs Set 但我不喜欢它修改我的数据 ECMAScript 6 有它 Spec http
  • 序列化和反序列化期间如何调用构造函数?

    序列化和反序列化过程中如何调用构造函数 什么时候有一个类实现可序列化 当存在父 子关系并且只有子实现可序列化时 当存在父子关系并且父子都实现了可序列化时 在反序列化期间 为继承层次结构中未实现 Serialized 的第一个类调用可访问的默
  • 如何编写迁移以使用ManyToManyField更改模型的主键

    我有一个UserProfile指的是我的模型User模型与一个OneToOneField 我也用post save信号自动创建UserProfile当用户被创建时 除了通过管理员创建用户 我使用内联 时 当我收到有关重复配置文件的错误时 这
  • 有没有办法在不调用另一个函数的情况下从成功处理程序中获取值?

    好的 现在我正在这样做 google script run withSuccessHandler updateOutput withFailureHandler errorOutput finish 进而 function updateOu
  • 50 次迭代后,常数“pi”的近似值并没有变得更好

    在 R 中我写了这个函数 ifun lt function m o c for k in 1 m o k prod 1 k prod 2 1 k 1 o sum 2 1 sum o Final result print o sum 该函数近