Forum: Ruby Math Time!

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Ari B. (Guest)
on 2007-05-02 04:23
(Received via mailing list)
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.
Emilio T. (Guest)
on 2007-05-02 04:39
(Received via mailing list)
On 5/1/07, Ari B. <removed_email_address@domain.invalid> 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
James G. (Guest)
on 2007-05-02 04:44
(Received via mailing list)
On May 1, 2007, at 7:22 PM, Ari B. 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 G. II
Todd B. (Guest)
on 2007-05-02 06:29
(Received via mailing list)
--- James Edward G. II <removed_email_address@domain.invalid>
wrote:

>
>
> James Edward G. 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
Todd B. (Guest)
on 2007-05-02 06:32
(Received via mailing list)
--- Todd B. <removed_email_address@domain.invalid> wrote:

> puts pi( 1000 )

Oops!  I meant -> puts pi( 1e1000 )
This topic is locked and can not be replied to.