Я написал краткую программу на Java, чтобы попытаться найти приблизительные значения для Pi, используя доли целых чисел. Однако, похоже, он вообще ничего не делает. Что я хочу делать. Фактически, он, кажется, ничего не делает, и просто повторно распечатывает жестко заданные начальные значения.Аппроксимация Pi - Почему этот код не работает?
Чтобы понять, что происходит не так, я перевел свой код на Python, потому что я только изучаю Java, но вполне комфортно в Python. Однако по какой-то причине он работает точно так, как я предполагал. Должно быть, я прочитал обе версии кода не менее 10 раз, и я не понимаю, почему один работает, а другой нет.
Во всяком случае, вот мой код в Java:
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));
}
}
}
И вот что я считаю, должны быть функционально идентичны код в Python:
from math import pi as PI
def findApproximate(arg=10000):
numer, denom = 3, 1
pi = numer/denom
for i in range(numer, arg+1):
for j in range(int(i/4), int((i/2)+1)):
if not j:
continue
newPi = i/j
if abs(newPi-PI) < abs(pi-PI):
print("Found better approximation")
numer, denom, pi = i, j, newPi
print("%d/%d == " % (numer, denom) + str(pi))
return pi
Но по какой-то причине это прекрасно работает в то время как выше Безразлично» т, и это заставляет меня абсолютно бонкеров. Пожалуйста, помоги, если можешь.
Подсказка: 'int/int = int' (а не' double'). – Seelenvirtuose
Вы используете это в среде IDE или из командной строки? убедитесь, что вы правильно настроили свои аргументы, потому что если arg = 0, то это даст вам результат, который вы найдете. – dodo
@Seelenvirtuose: bingo, это проблема OP, потому что Java-программа отбрасывает фракции * до *, чтобы удвоить. – user268396