Search All of the Math Forum:

Views expressed in these public forums are not endorsed by NCTM or The Math Forum.

Notice: We are no longer accepting new posts, but the forums will continue to be readable.

Topic: Output Precision Exploration
Replies: 6   Last Post: Apr 29, 2011 6:55 AM

 Search Thread: Advanced Search

 Messages: [ Previous | Next ]
 ברק שושני Posts: 8 Registered: 12/19/10
Re: Output Precision Exploration
Posted: Apr 28, 2011 5:43 AM
 Plain Text Reply

On Apr 27, 12:39 pm, Rafael Dunn <worthless.trash.j...@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@Log[173.5/173.5]

0

See tutorial/NumericalPrecision in the Mathematica documentation.

Date Subject Author
4/27/11 Rafael Dunn
4/28/11 Bob Hanlon
4/28/11 DrMajorBob
4/28/11 ברק שושני
4/28/11 Sseziwa Mukasa
4/28/11 Joseph Gwinn
4/29/11 Daniel Lichtblau

© The Math Forum at NCTM 1994-2018. All Rights Reserved.