Ruby on Rails Sunday, December 26, 2010

Just a footnote to all of this.


The difference between using a value for pi of 3.1415927 or 3.14159265, between 7 and 8 digits of precision, when calculating the circumference of the earth introduces a difference of less than a meter. All very reasonable, but I still found it surprising.

I was taking a differential equations class from a very knowledgeable math professor who told us about it. He was also surprised to discover that such low precision in pi can lead to such precision in the physical world. 

Fred

On Sat, Dec 25, 2010 at 5:30 PM, Marnen Laibow-Koser <lists@ruby-forum.com> wrote:
Colin Law wrote in post #970667:
> On 25 December 2010 20:15, Marnen Laibow-Koser <lists@ruby-forum.com>
> wrote:
>>>> correct design.
>>
>> Not at all! You can't store 397 significant figures in a Float. You
>> can in a BigDecimal. Apparently you are wilfully ignoring this
>> advantage, since it has been brought up several times already.
>
> I am not at all saying there is no advantage to BigDecimal, merely
> exploring the issues.  I entirely agree that for + - * there can be
> significant advantages.  I am pointing out here that as soon as you
> get into more complex calculations involving division, or irrational
> numbers such as pi, and trig functions, square roots and so on that
> BigDecimal is not a panacea and will not guarantee that there are no
> errors in the calculations.

OK, that I agree with.  I thought you were going further.

>
>>>  Also errors will potentially increase every time a divide
>>> operation is performed. It seems that the default is actually 8 digit
>>> which is only single precision float accuracy.
>>>
>>
>> So don't use the default! Sheesh.
>
> Right, again I was pointing out that one cannot blindly assume that
> BigDecimal is a panacea, it is necessary to understand ones problem
> and use the features appropriately.  I am not suggesting you would not
> do that, others may not realise the issues however.  It does seem
> strange to me that the default should be such low precision.

And to me.

> It means
> that doing complex arithmetic with BigDecimal using the default
> precision one may get much greater errors than with Float.

Right.

>
>>> I see that http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic
>>> discusses exactly this problem and the use of Rationals to get around
>>> it. It seems to suggest that some languages do that.
>>
>> And that would be easy to do in Ruby. I'm glad we have a choice,
>> though.
>
> You misunderstand me, I was talking about the possibility of
> BigDecimal automatically using Rationals internally when division is
> involved (if the division does not result in an exact result).  So if
> one did BD(1) / BD(3) then the result would be exactly 1/3 and would
> be a BigDecimal.  Internally it would be a Rational but the user would
> not need to know that.

Is that really a good idea?  This is where I think you're really arguing
for a further abstraction as I already proposed.


> The Wikipedia article appeared to suggest that
> some languages automatically do that.  Again I am not saying Ruby
> _should_ do that, merely exploring the issues again.

I'd want a symbolic math system like Mathematica to do that.  I'm not
sure if a general-purpose programming language should.

>
> I am not trying to have an argument here, I am learning a lot myself
> by researching the issues and value such discussions greatly.

Me too!  This is fascinating.

>
> Did you have a chance to see whether for you the result of BD 1 / BD 3
> where each was specified as 16 bit appeared to result in an 8 bit
> answer, and if so, why?

Not yet.  Even though I'm Jewish, Christmas has me really busy!

>
> Colin

Best,
-- 
Marnen Laibow-Koser
http://www.marnen.org
marnen@marnen.org

Sent from my iPhone

--
Posted via http://www.ruby-forum.com/.

--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.


--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.

No comments:

Post a Comment