2017-02-28 1 views
1

Ich versuche, eine Produktberechnung in Java zu machen, aber ich kann nicht scheinen, es zur Arbeit zu bringen. Ich habe anfangs versucht, WolframAlpha zu verwenden, aber ich habe die Verarbeitungszeit überschritten.Produktberechnung in Java mit BigDecimal

Die Formel lautet: Product (n/1220096908800), n=1..1220096908800

Dies ist der Code Ich habe versucht:

BigDecimal z = new BigDecimal("0"); 
BigDecimal n = new BigDecimal("1220096908800"); 

for (BigDecimal x = BigDecimal.valueOf(1); x.compareTo(n) < 0; x = x.add(BigDecimal.ONE)) { 
    z = (x.divide(n)).multiply(z); 
} 

z = z.setScale(8, BigDecimal.ROUND_DOWN); 
DecimalFormat df = new DecimalFormat(); 
df.setMaximumFractionDigits(3); 

df.setMinimumFractionDigits(6); 

df.setGroupingUsed(false); 
System.out.print(df.format(z)); 

Gedanken?

EDIT: Das ist der Fehler, den ich

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
    at java.math.BigDecimal.divide(BigDecimal.java:1690) 
    at javaapplication3.JavaApplication3.main(JavaApplication3.java:34) 
+1

Was bedeutet " kann nicht scheinen, um es zur Arbeit zu bringen "gemein? – nicomp

+7

Also machen Sie diese Schleife, wo Sie 2 Zahlen teilen, dann multiplizieren Sie mit 0, die jedes Mal 0 wird. Kannst du erklären, was du erreichen willst? – ControlAltDel

+0

Wenn Sie Produkt (n/12000 ..) sagen, was das bedeutet, Produkt von was? –

Antwort

1

Sie beginnen mit BigDecimal z = new BigDecimal("0"); Also ich empfangen, wenn Sie alles von 0 multipliziert wird, wird es immer auf 0

kommen zurück Ein weiteres Problem ist dass Sie versuchen, zu teilen, zwei BigDecimal, die nicht geteilt werden kann.

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html

wenn der genaue Quotient nicht dargestellt werden kann (weil es eine nicht abbreche Dezimalentwicklung) ein ArithmeticException geworfen wird.

Wenn ich das richtig verstanden, Sie zu berechnen versuchen, ist:

1220096908800!/1220096908800^1220096908800 

Vielleicht sollten Sie einen Blick auf Stirling's approximation haben:

oder wie dieser Vortrag: How Does n! Compare to n^n

+0

ist das nicht dasselbe wie eine Produkt (Π) Berechnung, es ist ähnlich zur Summierung, die Berechnung ist nicht äquivalent oder vergleichbar, daher würde die Approximation von Stirling nicht gelten nicht anwenden, Sie haben recht, wenn Sie z auf 0 setzen, sollte es beginnen als 1 – MosaicOrange

+0

lassen; ' N = 1220096908800 Produkt (n/N) = 1/N * 2/N * (...) * N/N = (1 * 2 * ... N)/(N * N * ..) . * N) und (1 * 2 * ... * N) = N! und 'N * N * ... N' N mal =' N Leistung N' = 'N^N' so Produkt (n/1220096908800) = 1220096908800!/(1220096908800^1220096908800) –