realbasic-nug
[Top] [All Lists]

Re: math error

To: realbasic-nug at lists dot realsoftware dot com
Subject: Re: math error
From: Michael Sharpe <msharpe at ucsd dot edu>
Date: Fri, 28 Jul 2006 11:01:01 -0700
Cc: Sharpe Michael <msharpe at ucsd dot edu>
Delivered-to: listarchive at realsoftware dot com
Delivered-to: realbasic-nug at lists dot realsoftware dot com
References: <20060728170034 dot 56BA013D63DC at lists dot realsoftware dot com>
Peter,

Mathematica is misleading you here. At least in recent versions (I'm using 5.2), the last 48 positions are not 0, but are Indeterminate, indicating that the precision you requested goes beyond the numerical precision in the floating point number .036. The only numbers capable of an exact finite binary representation are those whose fractional representation as m/n (ie, all common factors removed) have n as a power of 2. As 36/1000 reduces to 9/250, and 250 is not a power of 2. In your first example, where you compute N[72/1000*750,100], what you are observing is the ability of Mathematica to do exact arithmetic calculations, not using any internal representation as a floating point number, at least when the number you enter is not manifestly approximate.

Michael

Subject: Re: Re: Math Error?
From: "Peter K. Stys" <pkstys at gmail dot com>
Date: Fri, 28 Jul 2006 12:35:56 -0400

On 7/28/06, Norman Palardy <npalardy at great-white-software dot com> wrote:

On Jul 28, 2006, at 8:53 AM, Peter K. Stys wrote:


In[26]:= N[72/2000*750,100]

Out[26]=
27.00000000000000000000000000000000000000000000000000000000000000000 00
0000000000000000000000000000000

In[27]:= N[72/2000*750]

Out[27]= 27.

Still suggests all these numbers and intermediate results are
representable exactly at machine precision.

I'm quite certain that 72/2000 is not.
Write it as the simple sum of powers of 2 and you find the problem.
72/2000 = 2^-2 + 2^-4 + 2^-5 + 2^-6 + 2^-11 + 2^-15 ..... and so on
and you never get exactly the result you get from 72/2000.
In the machine all you have is powers of 2



Actually we're both right and wrong:

In[55]:=RealDigits[0.036,2,100]

Out[55]= {{1,0,0,1,0,0,1,1,0,1,1,1,0,1,0,0,1,0,1,1,1,1,0,0,0,1,1,0,1,0,1,0,0,1, 1,1,1, 1,1,0,1,1,1,1,1,0,0,1,1,1,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0},-4}

Shows that 0.036 can be represented exactly in binary, but requires 51
significant digits (if I counted correctly to the last 1).  So with a
64 bit double, it probably just missed the # of digits in the mantissa
to represent 0.036 exactly.
Nuf time wasted on this, just a curiosity.

P.

_______________________________________________
Unsubscribe or switch delivery mode:
<http://www.realsoftware.com/support/listmanager/>

Search the archives of this list here:
<http://support.realsoftware.com/listarchives/lists.html>


<Prev in Thread] Current Thread [Next in Thread>