私はこのアルゴリズムの実装に取り組んでいます:
Piを返す必要があります。(3.14159265358997...)
ただし、3465 が返されます。08380616409399027053866316721684448367402010300966908309332973882999599659411211360242758373861308317643879780635184630098290272242883357405022286118769447139626740529154581760953310875095436535421219560594138762255908511917640030648067526109299744243940829460378910596439045439520465157646027690925590763148740548652082423588324877104387482766153998770169941684101802144682649967882757012123536830687257625430659822900932688971775399671873439271861807516504946648728835994224480190316893471461417030967875760350601186694437246158814749867709842784785131871243300974810329494822914089815426723108584630705497725315669913077299913418398857508437241498586991317385422304195098176197989649564351502676047855067112916239074816487154114049778906276077976862652238724331693187819339345278554873704778412189443547257967444970511424806150609434006569113662932077764862975010524542830427816636583274986465383665844386822482378789858671283376729834456505152396380274210110769559485082136039898561801
これが私のコードです:
package picalculator;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.math.MathContext;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
*
* @author ThomasSatterthwaite
*/
public class PiCalculator {
static int odd=1;
public static void main(String[] args) {
System.out.println("Please wait while I calculate pi...");
calculatePi();
System.out.println("I have successfully calculated pi.");
}
public static void calculatePi() {
BigInteger firstFactorial;
BigInteger secondFactorial;
BigInteger firstMultiplication;
BigInteger firstExponent;
BigInteger secondExponent;
int firstNumber = 1103;
BigInteger firstAddition;
BigDecimal currentPi = BigDecimal.ONE;
BigDecimal pi = BigDecimal.ONE;
BigDecimal one = BigDecimal.ONE;
int secondNumber = 2;
double thirdNumber = Math.sqrt(2.0);
int fourthNumber = 9801;
BigDecimal prefix = BigDecimal.ONE;
DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
for(int i=1;i<1000;i++){
firstFactorial = factorial(4*i);
secondFactorial = factorial(i);
firstMultiplication = BigInteger.valueOf(26390*i);
firstExponent = exponent(secondFactorial, 4);
secondExponent = exponent(BigInteger.valueOf(396),4*i);
firstAddition = BigInteger.valueOf(firstNumber).add(firstMultiplication);
currentPi = currentPi.add(new BigDecimal(firstFactorial.multiply(firstAddition)).divide(new BigDecimal(firstExponent.multiply(secondExponent)), new MathContext(10000)));
Date date=new Date();
System.out.println("Interation: " + i + " at " + dateFormat.format(date));
}
prefix =new BigDecimal(secondNumber*thirdNumber);
prefix = prefix.divide(new BigDecimal(fourthNumber), new MathContext(1000));
currentPi = currentPi.multiply(prefix, new MathContext(1000));
pi = one.divide(currentPi, new MathContext(1000));
System.out.println("Pi is: " + pi);
return;
}
public static BigInteger factorial(int a) {
BigInteger result=new BigInteger("1");
BigInteger smallResult = new BigInteger("1");
long x=a;
if (x==1) return smallResult;
while(x>1)
{
result= result.multiply(BigInteger.valueOf(x));
x--;
}
return result;
}
public static BigInteger exponent(BigInteger a, int b) {
BigInteger answer=new BigInteger("1");
for(int i=0;i<b;i++) {
answer = answer.multiply(a);
}
return answer;
}
}
私がしていることに問題を見つけることができる人はいますか? よろしくお願いします!