help-octave
[Top][All Lists]

## 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
-------------------------------------------------------------

```