3

まず、1を3で割るということについても同様のトピックがあることを認識していますが、私のコードはまったく異なり、そこに記載されている情報を自分の状況に適用する方法がわかりません。私はありとあらゆる助けをいただければ幸いです。

Scalaで円周率計算機を作成し、コードの最後に結果を出力しました。ただし、小数点以下の桁数をもっと増やしたいので、それを実現する方法がわかりません。私の現在の出力は:

Expected decimals: 34
3.141592653589793238462643383279500

コードは次のとおりです。

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

}
}
4

1 に答える 1

11

java.math.MathContextのインスタンスを作成するときは、別のものを指定する必要がありますBigDecimal。これは、出力に出力される小数点以下の桁数だけでなく、計算の精度にも影響することに注意してください。これは、単なる数値のフォーマットとはまったく異なります。

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
于 2012-01-11T17:20:01.490 に答える