【问题标题】:Riemann Sum Estimation黎曼和估计
【发布时间】:2014-05-21 04:44:47
【问题描述】:

我正在尝试计算解决以下问题的 n 值。我不确定我在哪里搞砸了。我也尝试使用 do while 循环,但我无法找出逻辑错误。有人可以帮忙吗?

如果 S = √ (6*( 1+1/2^2+1/3^2 +1/4^2 + 1/5^2 + ... ) ) = (pi^2)/6 , 在多少项之后,总和将等于 PI 到小数点后 6 位。 PI 到小数点后 6 位是 3.141592。我的代码的相关部分如下所示:

    double s = 0;


    for(int n=1;abs(sqrt(6*s) - 3.141592) >= pow(10,-6);n++) {

        s += (1/(pow(n,2)));

            NSLog(@"%i",n);

    }

【问题讨论】:

  • 仔细检查每一步的 s 是什么。 1/(...) 可能会转换为整数,因此您可能需要 1.0/(...) 作为猜测。
  • Pi 到小数点后 6 位不是 3.141592。它是 3.141593。
  • 感谢 Josh B,但这似乎不起作用。也是用户,感谢您的更正,尽管这是一个小问题(我不太担心 +/- 1 左右。

标签: objective-c c integral riemann


【解决方案1】:
int abs(int i)

计算一个整数的绝对值。因此在

abs(sqrt(6*s) - 3.141592)

浮点数sqrt(6*s) - 3.141592 转换为int 第一,一旦这个数字的绝对值小于一,它就给零。

您想改用fabs()

【讨论】:

  • 这很有趣。谢谢,虽然我不确定更改为 fabs 是否会产生正确的答案。
  • @user3525783:修改前你得到了什么答案?你现在得到什么答案,你认为哪个答案是正确的?请注意,舍入误差也可能起作用。
  • 嗯,它只是一直打印到 300,000 并继续运行。我很确定它不应该持续那么长时间。
  • @user3525783:在我的测试中,在 577490 处停止。请注意,您可以通过 1) 提前计算 pow(10,-6) 和 2) 删除循环内的 NSLog() 来提高性能。
  • 嗯,我的一直超过 600,000。我将使用 fabs(sqrt(6*s) - 3.141592) 重新运行它。在我使用 fabs(sqrt(6*s) - 3.141593) 之前
猜你喜欢
  • 2019-10-24
  • 1970-01-01
  • 2021-05-23
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多