help-octave
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: Comparing of values


From: Mike Miller
Subject: RE: Comparing of values
Date: Fri, 22 Oct 2004 12:26:06 -0500 (CDT)

On Fri, 22 Oct 2004, Hall, Benjamin wrote:

Searching for exact matches to floating point numbers can be troublesome just due to the nature of floating point numbers in computers (unfortunately, I can't really give a better answer than that!). For instance

3*0.05 - 0.15

ans =

 2.7756e-017

One work-around is the following:

beta = 0.05:0.05:0.95;

beta( beta == 3*0.05 )

or

beta( abs( beta - 0.15 ) < 0.00000001 )


It seems to me that this problem has come up fairly often. Here's a suggestion that might help:

Develop an additional boolean operator called "approximately equal" that would return 1 if terms were within, say, 10*eps, and 0 otherwise. It could use "~~", and work like this:

beta( beta ~~ 0.15 )

It would have the benefit of simplifying code and drawing attention to the problem of rounding errors. It would not be MATLAB compatible. It would require work that I am not able to do.

Even if that can't be done, maybe the 'help' entry for "==" could be changed to add a bit about the way that comparisons are made -- exact binary matches are required. For example, the computer's binary representation of .15 does not exactly match its binary representation of 3*.05, and therefore, .15 == 3*.05 returns 0.

Mike

--
Michael B. Miller, Ph.D.
Assistant Professor
Division of Epidemiology and Community Health
and Institute of Human Genetics
University of Minnesota
http://taxa.epi.umn.edu/~mbmiller/



-------------------------------------------------------------
Octave is freely available under the terms of the GNU GPL.

Octave's home on the web:  http://www.octave.org
How to fund new projects:  http://www.octave.org/funding.html
Subscription information:  http://www.octave.org/archive.html
-------------------------------------------------------------



reply via email to

[Prev in Thread] Current Thread [Next in Thread]