[comp.databases] Problems with data-type FLOATING in VAXDBMS

rader@Chicago.ira.uka.de (Klaus Radermacher) (03/03/88)

Setting up a database with VAXDBMS database system on a VAX8700 I encountered
the following problem:

Having a record with only one single item of type FLOATING I could not fetch
an record of this type using the following DML-Statement:

fetch first <record-name> where <item-name> eq 8.05

The system's answer was END-OF-COLLECTION, although the record definitely
existed	in the database.
The following statement did find the record:

fetch first <record-name> where <item-name> ge 8.05 and 
                                <item-name> le 8.0505

The system gave out the correct record. I understand that the problem arises 
due to the internal representation of the type FLOATING, the stored value 
must be a little bit larger than 8.05.

However, DEC claims in the manuals, that FLOATING has a precision of about 
7 digits, and the stored value was exactly 8.05!

Has anyone encountered similar problems yet? How did you get around the
problem?

I'm glad to hear from you.

Klaus Radermacher
Institut fuer Programmstrukturen
und Datenorganisation
University of Karlsruhe
FRG

e-mail: rader@ira.uka.de
 

andy@garfield.columbia.edu (Andy Lowry) (03/08/88)

In article <482@iraun1.ira.uka.de> rader@ira.uka.de (Klaus Radermacher) writes:
>However, DEC claims in the manuals, that FLOATING has a precision of about 
>7 digits, and the stored value was exactly 8.05!

It's important, when relying on those advertised precisions, to
remember that the mantissa in the floating point representation is
stored, in most cases, as a *binary* fraction.  Thus any statement as
to number of correct decimal digits can be a bit misleading.  As an
example, in the present case, the fractional part 0.05 cannot be
stored exactly, since the binary representation of 0.05 is
non-terminating.  It starts out as 0.0000110011000100....  In fact,
there are very few fractions that can be expressed exactly in seven
decimal digits and can be expressed exactly in binary at all (like
0.5).  So when you type a number like 8.05 to a program that must use
a binary floating point representation, internally you will
necessarily get only an approximation, no matter how big the mantissa
is.

Of course, these comments don't apply to machines that can directly
manipulate numbers stored in a decimal representation.

-Andy