Pregunta

En primer lugar, soy consciente de que hay un tema similar con respecto a la división de 1 por 3. Sin embargo, mi código es bastante diferente y no sé cómo aplicar la información dada allí a mi situación. Agradecería toda la ayuda.

Hice una calculadora PI en Scala y al final del código imprimo el resultado. Sin embargo, quiero tener una cantidad mucho mayor de decimales y no sé cómo lograrlo. Mi salida actual es:

Expected decimals: 34
3.141592653589793238462643383279500

Aquí está el código:

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

}
}
¿Fue útil?

Solución

Tienes que proporcionar un diferente java.math.MathContext Cuando creas tus instancias de BigDecimal. Tenga en cuenta que esto afecta la precisión del cálculo, no solo cuántos decimales se imprimen en la salida. Esto es bastante diferente del mero formato de los números.

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top