Java 近似Pi-为什么不';这个代码不起作用吗?
我用Java编写了一个快速程序,试图用整数的分数找到Pi的近似值。然而,它似乎根本没有做我想要它做的事情。事实上,它似乎什么也不做,只是重复打印硬编码的起始值 为了找出哪里出了问题,我将代码翻译成Python,因为我只是在学习Java,但对Python非常熟悉。然而,出于某种原因,它完全按照我的预期工作。我现在一定已经阅读了这两个版本的代码至少10次了,但我不明白为什么一个有效,另一个无效 总之,以下是我的Java代码:Java 近似Pi-为什么不';这个代码不起作用吗?,java,Java,我用Java编写了一个快速程序,试图用整数的分数找到Pi的近似值。然而,它似乎根本没有做我想要它做的事情。事实上,它似乎什么也不做,只是重复打印硬编码的起始值 为了找出哪里出了问题,我将代码翻译成Python,因为我只是在学习Java,但对Python非常熟悉。然而,出于某种原因,它完全按照我的预期工作。我现在一定已经阅读了这两个版本的代码至少10次了,但我不明白为什么一个有效,另一个无效 总之,以下是我的Java代码: public class RationalPi { public
public class RationalPi {
public static void main(String[] args) {
int arg;
if (args.length>0) { arg = Integer.parseInt(args[0]); }
else { arg = 10000; }
int numer = 3;
int denom = 1;
double pi = numer / denom;
for (int i=numer; i<=arg; i++) {
for (int j=i/4; j<=i/2; j++) {
if (j==0) { continue; }
double newPi = i / j;
if (Math.abs(newPi-Math.PI) < Math.abs(pi-Math.PI)) {
System.out.println("found better approximation");
numer = i;
denom = j;
pi = newPi;
}
}
System.out.println(String.format("%d /%2d == %f", numer, denom, pi));
}
}
}
公共类理性{
公共静态void main(字符串[]args){
int-arg;
如果(args.length>0){arg=Integer.parseInt(args[0]);}
else{arg=10000;}
整数=3;
int-denom=1;
双pi=数值/小数;
对于(int i=numer;i,这条线是对整数的除法,然后将(截断的)结果存储到一个double
double newPi = i / j;
如果希望得到准确的结果,请将其中一个变量强制转换为双精度
double newPi = (double) i / j;
同
double pi = numer / denom;
这一行是整数的除法,然后将(截断的)结果存储到一个double
double newPi = i / j;
如果希望得到准确的结果,请将其中一个变量强制转换为双精度
double newPi = (double) i / j;
同
double pi = numer / denom;
提示:int/int=int
(而不是double
)。您是在IDE中还是在命令行中运行此操作?请确保正确设置了参数,因为如果arg=0,则会给出您正在查找的结果。@Seelenvirtuose:bingo,这是OP的问题,因为Java程序在升级为双精度之前会丢弃分数。提示:int/int=int
(而不是双重的
)。您是在IDE中运行还是在命令行中运行?请确保正确设置了参数,因为如果arg=0,则会给出您正在查找的结果。@Seelenvirtuose:bingo,这是OP的问题,因为Java程序在升级为double之前会丢弃分数。谢谢,我知道这一定是个问题y、 我现在要为自己感到羞耻了。谢谢,我知道这一定很愚蠢。我现在要为自己感到羞耻了。