RosettaCodeData/Task/Pi/Scala/pi.scala

36 lines
759 B
Scala

object Pi {
class PiIterator extends Iterable[BigInt]{
var r:BigInt=0
var q, t, k:BigInt=1
var n, l:BigInt=3
var nr, nn:BigInt=0
def iterator: Iterator[BigInt]=new Iterator[BigInt]{
def hasNext=true
def next():BigInt={
while((4*q+r-t) >= (n*t)) {
nr = (2*q+r)*l
nn = (q*(7*k)+2+(r*l))/(t*l)
q = q * k
t = t * l
l = l + 2
k = k + 1
n = nn
r = nr
}
val ret=n
nr = 10*(r-n*t)
n = ((10*(3*q+r))/t)-(10*n)
q = q * 10
r = nr
ret
}
}
}
def main(args: Array[String]): Unit = {
val it=new PiIterator
println((it head) + "." + (it take 300 mkString))
}
}