Domanda

Prima di tutto, mi rendo conto che c'è un argomento simile per quanto riguarda la divisione del 1 da 3. Tuttavia, il mio codice è ben diversa e non so come applicare le informazioni fornite lì per la mia situazione. Gradirei qualsiasi aiuto.

Ho fatto una calcolatrice Pi in Scala e alla fine del codice che stampare il risultato. Tuttavia, voglio avere un numero molto maggiore di cifre decimali e non so come raggiungere questo obiettivo. La mia uscita in corrente è:

Expected decimals: 34
3.141592653589793238462643383279500

Ecco il codice:

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)
}

}
}
È stato utile?

Soluzione

Si deve fornire una java.math.MathContext diverso quando si creano le istanze di BigDecimal. Si noti che questi effetti la precisione del calcolo, non solo quanti decimali vengono stampati in uscita. Questo è molto diverso dal semplice formattazione dei numeri.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top