Method: BigMathR::Const::PI.euler
- Defined in:
- lib/bigdecimal/math_r/const/PI_euler.rb
.euler(prec) ⇒ BigDecimal
Implement by Euler’s formula.
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/bigdecimal/math_r/const/PI_euler.rb', line 18 def euler(prec) raise TypeError, "precision must be an Integer" unless prec.class == Integer raise RangeError, "Zero or negative precision" if prec <= 0 n = BigDecimal.double_fig + prec one = BigDecimal(1) two = BigDecimal(2) s = BigDecimal(0) t = one t1 = BigDecimal(0) t2 = one n = prec + BigDecimal.double_fig while t.nonzero? && ((m = n - (s.exponent - t.exponent).abs) > 0) m = BigDecimal.double_fig if m < BigDecimal.double_fig s = s + t t1 = t1 + one; t = t.mult(t1, m) t2 = t2 + two; t = t.div(t2, m) end two.mult(s, prec) end |