MathGroup Archive 2011

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Output Precision Exploration

  • To: mathgroup at smc.vnet.net
  • Subject: [mg118428] Re: Output Precision Exploration
  • From: Barak Shoshany <baraksh at gmail.com>
  • Date: Thu, 28 Apr 2011 06:33:07 -0400 (EDT)
  • References: <ip8o8c$piq$1@smc.vnet.net>

On Apr 27, 12:39 pm, Rafael Dunn <worthless.trash.j... at gmail.com>
wrote:
> Mathematica 8.0.1.0, Mac OSX x86
>
> In:=
> Log[173.5/173.5]
>
> Out:=
> -1.11022*10^-16
>
> I expect an output of exactly 0.  Although 10^-16 is small, it turned
> out to be the largest factor in a chemical equation I was attempting to
> compute.
>
> I discovered this is because Mathematica does not actually evaluate
> 173.5/173.5 = 1.  The output is actually some number 0.9999999999...
>
> However, for most decimal constants x/x produces an exact output of 1. 
> By entering a few decimals off the top of my head I also found 1733.5, 
> 26.44, and 27.44 do not produce an output of 1 when divided by
> themselves.
>
> Why?  I understand Mathematica's algorithms for working with decimals
> must make approximations, but why is there so much variance among
> decimal calculations?  173.49/173.49 = 1, while 173.5/173.5 != 1. 
> Furthermore, I find:
> x=173.49999999999999
> x/x = 173.5/173.5, with infinite precision.  If you add or remove a
> single 9 to the end of x, this ceases to be true.
>
> Furthermore, this looks like a contradiction to me:
>
> In:=
> 173.5/173.5 = 1
> Log[1] = 0
> Log[173.5/173.5] = 0
>
> Out:=
> True
> True
> False
>
> I have learned a lot about Mathematica's precision and approximation through the help documentation, but I still can not explain this or see how I can expect Log[x/x] = 0 for the sake of calculations on the 10^-16 scale.

173.5 is a machine precision number, not an exact number. So it's only
know up to a certain precision. Try this:

InputForm[173.5/173.5]

0.9999999999999999

So it's only *approximately* 1. Of course, you could specify the
numbers to be of arbitrary precision, for example 100 digits:

Log[173.5`100/173.5`100]

0.*10^-100

However, the answer will never be *exactly* 0 because it is only known
to a certain precision. This is what Chop was made for:

Chop at Log[173.5/173.5]

0

See tutorial/NumericalPrecision in the Mathematica documentation.


  • Prev by Date: Re: Questions concerning export of 3d plots
  • Next by Date: Postfix specification graphics, etc.
  • Previous by thread: Re: Output Precision Exploration
  • Next by thread: Re: Output Precision Exploration