diff options
author | shigek <shigek@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-28 05:00:21 +0000 |
---|---|---|
committer | shigek <shigek@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-03-28 05:00:21 +0000 |
commit | 77443517086c68cb51f26f68f5d25279f1be7daf (patch) | |
tree | 89e28877c7faa0402135f784553db6a1578eeb3a /ext/bigdecimal/lib/pai.rb | |
parent | 8369db4b3bf760a9a59822104966b78489ee8ada (diff) | |
download | ruby-77443517086c68cb51f26f68f5d25279f1be7daf.tar.gz |
Copied from rough/bigdecimal,documents & some sample programs added.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/bigdecimal/lib/pai.rb')
-rw-r--r-- | ext/bigdecimal/lib/pai.rb | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/ext/bigdecimal/lib/pai.rb b/ext/bigdecimal/lib/pai.rb new file mode 100644 index 0000000000..4e2dd7104a --- /dev/null +++ b/ext/bigdecimal/lib/pai.rb @@ -0,0 +1,49 @@ +#!/usr/local/bin/ruby + +# +# pai.rb +# + +require "bigdecimal" +# +# Calculates 3.1415.... using J. Machin's formula. +# +def pai(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 "PAI("+ARGV[0]+"):\n" + p pai(ARGV[0].to_i) + else + print "TRY: ruby pai.rb 1000 \n" + end +end |