Frage

Zunächst bin ich mir bewusst, dass es ein ähnliches Thema in Bezug auf die Aufteilung von 1 bis 3 gibt. Mein Code ist jedoch ganz anders und ich weiß nicht, wie ich die dort gegebenen Informationen auf meine Situation anwenden soll. Ich würde mich über jede Hilfe freuen.

Ich habe in Scala einen PI -Rechner erstellt und am Ende des Codes drucke ich das Ergebnis aus. Ich möchte jedoch eine viel größere Anzahl von Dezimalstellen haben und weiß nicht, wie ich das erreichen soll. Meine aktuelle Ausgabe ist:

Expected decimals: 34
3.141592653589793238462643383279500

Hier ist der Code:

package theBrain
object Calculator 
{
def main(args: Array[String]) 
{

var i = 100
var j = 100
var lastValueOnFirstLine = j+i
var array = new Array [BigDecimal] (0)

var counter = i-1

for (d <- j to lastValueOnFirstLine by 1)
{
  var almostPi = BigDecimal(0)
  var pi = BigDecimal(0)

  for (b <- 0 to d by 1)
  {
      var partialAnswer = (if (b%2 != 0) {-1} else {1} )/((BigDecimal(2)*BigDecimal(b))+BigDecimal(1))
      almostPi = partialAnswer + almostPi

  }
  pi = 4*almostPi
 array = array:+pi
}

for (z <- counter to 0 by -1){
var array2 = new Array [BigDecimal] (0)
var length = array.length -2
for (a <- 0 to length by 1){

var result = (array(a)+array(a+1))/2
array2 = array2:+result
}
array = array2
counter -= 1
}

for (element <- array) {
println("Expected decimals: " + element.precision)
println(element)
}

}
}
War es hilfreich?

Lösung

Sie müssen eine andere liefern java.math.MathContext Wenn Sie Ihre Instanzen erstellen BigDecimal. Beachten Sie, dass dies die Genauigkeit der Berechnung bewirkt, nicht nur, wie viele Dezimalstellen auf die Ausgabe gedruckt werden. Dies unterscheidet sich ganz von der bloßen Formatierung von Zahlen.

scala> BigDecimal(1) / 3
res0: scala.math.BigDecimal = 0.3333333333333333333333333333333333

scala> res0.precision
res1: Int = 34

scala> BigDecimal(1, new java.math.MathContext(50)) / 3
res2: scala.math.BigDecimal = 0.33333333333333333333333333333333333333333333333333

scala> res2.precision
res3: Int = 50
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top