From cff57b4a267b61561b04c527b5ce04d64cbcf78b Mon Sep 17 00:00:00 2001 From: shigek Date: Thu, 24 Apr 2003 13:37:32 +0000 Subject: Dir. rearrangement according to the suggestions from Minero Aoki. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3722 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ext/bigdecimal/sample/pi.rb | 50 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 ext/bigdecimal/sample/pi.rb (limited to 'ext/bigdecimal/sample/pi.rb') diff --git a/ext/bigdecimal/sample/pi.rb b/ext/bigdecimal/sample/pi.rb new file mode 100644 index 0000000000..cbb8448a38 --- /dev/null +++ b/ext/bigdecimal/sample/pi.rb @@ -0,0 +1,50 @@ +#!/usr/local/bin/ruby + +# +# pi.rb +# + +require "bigdecimal" +# +# Calculates 3.1415.... (the number of times that a circle's diameter +# will fit around the circle) using J. Machin's formula. +# +def big_pi(sig) # sig: Number of significant figures + exp = -sig + pi = BigDecimal::new("0") + two = BigDecimal::new("2") + m25 = BigDecimal::new("-0.04") + m57121 = BigDecimal::new("-57121") + + u = BigDecimal::new("1") + k = BigDecimal::new("1") + w = BigDecimal::new("1") + t = BigDecimal::new("-80") + while (u.exponent >= exp) + t = t*m25 + u,r = t.div(k,sig) + pi = pi + u + k = k+two + end + + u = BigDecimal::new("1") + k = BigDecimal::new("1") + w = BigDecimal::new("1") + t = BigDecimal::new("956") + while (u.exponent >= exp ) + t,r = t.div(m57121,sig) + u,r = t.div(k,sig) + pi = pi + u + k = k+two + end + pi +end + +if $0 == __FILE__ + if ARGV.size == 1 + print "PI("+ARGV[0]+"):\n" + p big_pi(ARGV[0].to_i) + else + print "TRY: ruby pi.rb 1000 \n" + end +end -- cgit v1.2.3