Alright everybody! Math time! So today I tried to write a program which would print out, say, 1000 digits of pi. I figured I'd do this by assigning a.... variable...... to be a bignum....... crap, Ruby is duck typing! I mean, yay? Ok, so to the point. How do I tell Ruby to print a value (.to_f) to a certain number of integers? .to_f(1000)? And also, how do I write tan, cos, sin, etc. in Ruby? Thanks for the help, math rulez --------------------------------------------| If you're not living on the edge, then you're just wasting space.

on 2007-05-02 02:23

on 2007-05-02 02:39

On 5/1/07, Ari Brown <ari@aribrown.com> wrote: > Alright everybody! Math time! > > So today I tried to write a program which would print out, say, 1000 > digits of pi. I figured I'd do this by assigning a.... variable...... > to be a bignum....... crap, Ruby is duck typing! I mean, yay? > > Ok, so to the point. How do I tell Ruby to print a value (.to_f) to a > certain number of integers? .to_f(1000)? And also, how do I write > tan, cos, sin, etc. in Ruby? > I havent done this with numbers but you could use: number.to_s[0..1000] If u can do that without the convertion it should be better, but if not i hope my solution helps you. About maths check the Ruby builins Math module: http://www.rubycentral.com/book/ref_m_math.html

on 2007-05-02 02:44

On May 1, 2007, at 7:22 PM, Ari Brown wrote: > So today I tried to write a program which would print out, say, > 1000 digits of pi. ruby -rbigdecimal -rbigdecimal/math -e 'include BigMath; digits = 1000; puts "3."+BigDecimal.PI(digits).to_s[3,digits]' > Ok, so to the point. How do I tell Ruby to print a value (.to_f) to > a certain number of integers? printf "%.20f", flt > .to_f(1000)? And also, how do I write tan, cos, sin, etc. in Ruby? Math.tan(num) # etc. James Edward Gray II

on 2007-05-02 04:29

--- James Edward Gray II <james@grayproductions.net> wrote: > > > James Edward Gray II Or you could do it the hard way (yes, reinventing the wheel is one of my faults) #### # we'll just assume all computed variables # are BigDecimals def pi( precision ) (0..precision).inject(0) { |sum, i| i*=4; sum + 1.0/(i+1) - 1.0/(i+3) } * 4 end puts pi( 1000 ) #### # 900 times the age of the universe # later on my slow system ... # 3.14159... # this series takes my system about 6 seconds # just to get to 3.14159 (precision = 1_000_000) # and goes up about a factor of 10 for each additional # digit # # for 1000 digits, you would need a precision # value of 1 followed by 1000 0's (1e1000) #### # cos() converges almost immediately def fact( i ) return i == 0 ? 1 : fact( i - 1 ) * i end def cos( angle, precision ) (0..precision).inject(0) { |sum, i| i*=4; sum + angle**i/fact(i) - angle**(i+2)/fact(i+2) } end puts cos( 1.0, 3 ) # 0.540302305868092 require 'mathn' puts Math::cos(1.0) # 0.54030230586814

on 2007-05-02 04:32

```
--- Todd Benson <toddkennethbenson@yahoo.com> wrote:
> puts pi( 1000 )
Oops! I meant -> puts pi( 1e1000 )
```