Class: Daimyo::Pi

Inherits:
Object
  • Object
show all
Defined in:
lib/daimyo/pi.rb,
lib/daimyo/pi/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(precision: 10) ⇒ Pi

Returns a new instance of Pi.



6
7
8
# File 'lib/daimyo/pi.rb', line 6

def initialize(precision: 10)
  @precision = precision
end

Instance Attribute Details

#precisionObject (readonly)

Returns the value of attribute precision.



9
10
11
# File 'lib/daimyo/pi.rb', line 9

def precision
  @precision
end

Instance Method Details

#gauss_l(iter: 3) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/daimyo/pi.rb', line 20

def gauss_l(iter: 3)
  a = BigDecimal("1")
  b = BigDecimal("1") / BigDecimal("2").sqrt(precision)
  t = BigDecimal("0.25")
  p_ = BigDecimal("1")

  iter.times do
    an = (a + b) / 2
    b = (a * b).sqrt(precision)
    t -= p_ * (an - a) * (an - a)
    p_ *= 2
    a = an
  end

  ((a + b) * (a + b) / (4 * t)).truncate(precision)
end

#leibniz(iter: 10) ⇒ Object



11
12
13
14
15
16
17
18
# File 'lib/daimyo/pi.rb', line 11

def leibniz(iter: 10)
  ans = BigDecimal("0")
  (0...iter).each do |n|
    ans += (BigDecimal("-1") ** n) / (2 * n + 1)
  end

  return (ans * 4).truncate(precision)
end