home clear 64x64
en blue 200x116 de orange 200x116 info letter User
suche 36x36
Latest versionsfixlist
11.1.0.7 FixList
10.5.0.9 FixList
10.1.0.6 FixList
9.8.0.5 FixList
9.7.0.11 FixList
9.5.0.10 FixList
9.1.0.12 FixList
Have problems? - contact us.
Register for free anmeldung-x26
Contact form kontakt-x26

DB2 - Problem description

Problem IC73476 Status: Closed

FLOATING POINT USAGE CAN RESULT IN LESS ACCURATE RESULTS FOR NUMBERS WITH
LARGE AMOUNT OF SIGNIFICANT DIGITS

product:
DB2 FOR LUW / DB2FORLUW / 950 - DB2
Problem description:
As per IEEE 754 standard for floating point datatypes, floating 
point numbers are a binary approximation of an actual number. 
As such, when these datatypes are stored, there is potential for 
a loss of accuracy (implicit rounding) if there is not enough 
bytes in the floating point type to store the binary 
representation of the number.  For some numbers, in particular 
(but not limited to) those numbers that have a large amount of 
significant digits, this gives a number that may lose the 
precision and accuracy that is needed in some applications. 
 
In DB2, the floating point datatypes are DOUBLE, FLOAT, and REAL 
(see documentation about DB2 datatypes). If having precision and 
accuracy is required for the application, then it is not 
recommended to use floating point types, and the DECIMAL or 
DECFLOAT datatype should be used instead. 
 
In DB2, when these floating point types are converted to a 
DECIMAL, DB2 imposes a rounding rule on the number. 
Specifically, for 8 byte floating point types such as DOUBLE, it 
will perform a rounding after the 16th digit.  For 4 byte 
floating point types such as REAL, it will impose a rounding 
after the 7th digit of precision. 
 
REAL example: 
db2 "values(decimal(real(123456789),30,10))" 
 
1 
-------------------------------- 
            123456800.0000000000 
 
  1 record(s) selected. 
 
DOUBLE example: 
db2 "values(decimal(double(123456789123456789),30,10))" 
 
1 
-------------------------------- 
   123456789123456800.0000000000 
 
  1 record(s) selected. 
 
 
In some cases for numbers that are already suffering from the 
binary approximation accuracy concerns, the rounding algorithm 
may not be desired. 
 
This APAR provides an alternate approach to the double rounding 
technique, by doing a truncation approach instead. 
 
REAL example with fix: 
 db2 "values(decimal(real(123456789.1235),30,10))" 
 
1 
-------------------------------- 
            123456700.0000000000 
 
DOUBLE example with fix: 
db2 "values(decimal(double(123456789123456789),30,10))" 
 
1 
-------------------------------- 
   123456789123456700.0000000000 
 
  1 record(s) selected. 
 
Since this is a behaviour change in how floating point numbers 
are treated by DB2, this change is not provided for general use. 
 If this APAR is required, then please contact DB2 support team, 
who can provide guidance on how to enable this alternate mode 
for converting floating point types to DECIMAL.
Problem Summary:
**************************************************************** 
* USERS AFFECTED:                                              * 
* Customers on V9.1, V9.5, V9.7 using floating point numbers   * 
* with large number of digits.                                 * 
**************************************************************** 
* PROBLEM DESCRIPTION:                                         * 
* FLOATING POINT USAGE CAN RESULT IN LESS ACCURATE RESULTS FOR * 
* NUMBERS WITH LARGE AMOUNT OF SIGNIFICANT DIGITS              * 
**************************************************************** 
* RECOMMENDATION:                                              * 
* Upgrade to fixpack containing this fix.                      * 
****************************************************************
Local Fix:
available fix packs:
DB2 Version 9.5 Fix Pack 8 for Linux, UNIX, and Windows
DB2 Version 9.5 Fix Pack 9 for Linux, UNIX, and Windows
DB2 Version 9.5 Fix Pack 10 for Linux, UNIX, and Windows

Solution
Customer will need to apply this fix by applying latest V9.1 / 
V9.5 / V9.7 fixpacks.
Workaround
not known / see Local fix
Timestamps
Date  - problem reported    :
Date  - problem closed      :
Date  - last modified       :
23.12.2010
30.06.2011
30.06.2011
Problem solved at the following versions (IBM BugInfos)
9.1.,
9.5.,
9.7.
Problem solved according to the fixlist(s) of the following version(s)
9.5.0.8 FixList