- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在网上看了几个小时,想看看我是否能找到解决方案,虽然我已经找到了很多解决方案,但我教授的指示如下:
Write a program to estimate PI (π) using the following series. This problem is also described in the text as problem 5.25 at the end of chapter 5. If you are unfamiliar with series, problem 5.24 is a single pass through a series and the solution is posted in the Homework 3 course module.
π=4*(1-1/3+1/5-1/7+1/9-1/11+⋯〖-1〗^(i+1)/(2i-1)) Obviously, there is no user input for this problem so a modified worksheet is provided. You will to write a program that computes PI using i values of 10,000 to 100,000 in increments of 10000. Your output should look like: (Hint: Placing “/t” in the System.out.println between the values of i and PI will give you columns. This is the tab character).
我________PI
10000____3.xxxxx
20000____3.xxxx
30000____3.xxxx
You will need multiple loops to do this. The outer loop will increment i. The inner loop will compute the series from 1 to i. You may use any of the three types of loops, for, while, or do-while to do this.
现在我很清楚除此之外还有很多方法可以更好地找到 pi,但是这个作业的重点不是有效地找到 Pi,而是练习循环。然而,我尝试了多种方法,但所有方法要么返回无限循环、不正确的输出,要么就是无法编译。
编辑:感谢 Martijn Courteaux,我对代码进行了巨大改进。但是我似乎仍然无法正确增加计数。有什么建议么?我最近的尝试如下。
公共(public)课莱布尼茨公式{ public static void main(String[] args) {
System.out.println("i/t Pi");
int count = 10000;
double pi = 0;
double denominator = 1;
while(count < 100000){
for (int x = 0; x < count; x++) {
if (x % 2 == 0) {
pi = pi + (1 / denominator);
}
else {
pi = pi - (1 / denominator);
}
denominator = denominator + 2;
}
pi = pi * 4;
System.out.println(pi);
count = count + 10000;
System.out.println(count);
}
}
}
现在的结果是:
i/t Pi
3.1414926535900345
20000
12.566037281026608
30000
50.264165790773355
40000
201.05666982975973
50000
804.2266826523694
60000
3216.9067325142446
70000
12867.626931247545
80000
51470.50772578291
90000
205882.03090368543
100000
我真的不明白为什么当我硬编码“计数”的值时程序可以工作,但在增加它时却不能。我知道我听起来很乏味,但我真的很想了解出了什么问题以及为什么会出错。
我意识到将解决方案简单地张贴在这里不是好的形式,所以我不是要求这样做,我可能只需要一些伪代码或指针。我已经为此工作了很长一段时间。谢谢
最佳答案
有更高效和简洁的方法来编写这个程序,但最简单的解决方法是去掉 pi = pi * 4
,因为 while 循环的下一次迭代将具有更大的值 pi
开始。相反,只需打印出 pi * 4
而不仅仅是 pi
.
此外,这可能无关紧要,但实际上您提供的精度超出了需要;例如,对于 count = 20000
精度实际上是count = 30000
应该。你的内部 for 循环有 x < count
, 自 count
每次迭代后增加 10000,您实际上获得了 10000、30000、60000 等精度。您可以通过重新初始化 denominator
的值来解决此问题。和 pi
每次迭代,或更改 x < count
至 x < 10000
.
关于java - 用 Java 编写一个程序来估计 PI (π) 使用 Leibniz 级数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26455210/
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在使用带有Grove Pi +(1.2.2固件)的Raspberry Pi 3 B模型和用于Robots Image的Raspbian。 我在I2C-1端口中插入了多 channel 气体传感器,
这看起来非常简单,但我似乎无法弄清楚如何将 -Pi 和 Pi 之间的角度映射到 0 到 2Pi 的范围内。我尝试使用 np.select 但由于某种原因它卡住了我的程序。我需要这个范围内的角度,因为它
在使用 SciPy 和 NumPy 的项目中,我应该使用 scipy.pi , numpy.pi , 或 math.pi ? 最佳答案 >>> import math >>> import numpy
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我有一个运行 Raspbian 的 Raspberry Pi 1。我尝试在 Raspberry Pi 3 上运行 SD 卡,但它没有启动。 我已经阅读了有关升级 Raspberry Pi 2 安装以在
#include using namespace std; #define fast ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0); #d
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a softwar
我目前正在尝试RadiusNetworks发布的Raspberry Pi iBeacon教程,网址为 http://developer.radiusnetworks.com/2013/10/09/ho
我无法在运行Raspbian的Raspberry Pi 3上安装我创建的 Electron 应用程序。我已经使用了electronic-packager来创建软件包,然后创建了一个debian安装程序
我想在Linux上为Raspberry Pi 1设置交叉编译环境。 特别是我想尝试最新版本,即Raspbian测试+ Qt5开发分支。 这个问题: How can I create a modern
我想要从我的 Raspberry Pi Zero 到手机的低延迟流式传输。据我了解,移动浏览器不支持 RTMP 流式传输,HLS 流式传输具有高延迟,而 webRTC 是我最好的选择。 有谁知道从零开
我的公司使用 Raspberry Pi 3 作为产品中的嵌入式 Controller 。用户不会优雅地关闭它,他们只是扳动一个开关。为避免损坏,/boot 和/root 文件系统是只读的。这似乎是防弹
如何使用 Raspberry Pi 作为 b/w USB Tethered 手机和路由器的桥接器,使用“以太网电缆 b/w Raspberry Pi 和路由器”和“USB 电缆 b/w 手机和 Ras
我正在尝试在Raspberry Pi 3上安装Rakudo Star 2018.04。 我做: sudo perl Configure.pl --gen-moar --gen-nqp --prefix
我正在寻找一些可以有效完成的不错的 C 代码: while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI; while (deltaPhase T Mod(T
我正在尝试为 raspberry Pi 构建跨环境以在 Eclipse CDT for windows 上构建二进制文件。 我得到了用于访问 GPIO 的 Wiring Pi,我需要使用“Window
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我正在寻找一些可以有效完成的不错的 C 代码: while (deltaPhase >= M_PI) deltaPhase -= M_TWOPI; while (deltaPhase T Mod(T
这个问题在这里已经有了答案: C: How to wrap a float to the interval [-pi, pi) (15 个答案) 关闭 9 年前。 我想知道是否可以定义一个只能取 -
我是一名优秀的程序员,十分优秀!