Decimal float numbers have an interesting feature - same value may be 
represented with different precision - compare for example 0.5 and 
0.500. DB2 has special function to compare decimal float numbers, and it 
works correctly with such values, but what about traditional compare (if 
a=b then ...) treats them equal and it's correct. When sorting such 
values they should also be treated as equal (see also 
http://tracker.firebirdsql.org/browse/CORE-3547). And yes, decfloat 
value can also be '-0'.

That does not cause problems when building index keys but is not ideal 
for sort keys. The difference between that keys that is important here 
is that for sort keys we should be able to restore original value from 
the key. That requirement is already violated for floating point values 
after fix for CORE-3547 (we loose -0 value) but looks like it does not 
cause serious troubles here. Unfortunately for decimal floats things 
look (on my mind) worse. An output of select decFloatValue from table 
depends upon is it ordered by that value and what is even more worse 
upon presence of an index - when index is used field's values are 
extracted from table and are therefore precise. If you restore 
http://tracker.firebirdsql.org/secure/attachment/13073/decfloat.gbak and 
try three following statements:

select * from dtst; // plain unordered
select * from dtst plan (dtst natural) order by x; // plan frces use of 
sort instead use of index
select * from dtst plan order by x; // use index to order data retrieval

you will see how 0.500 changes in case of sort.

You may also look at behavior of plus/minus zero, very well seen in same 
selects from QTST table. I've left -0 and +0 different sort keys (like 
it was before fix of 3547) in order to let you see an effect, this may 
be changed in single line of code.

I wonder - how should we better handle that issues? Ignore like we did 
for plus/minus 0 in 3547? Or do something better like keeping original 
values in sort block?

Alex.


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
Firebird-Devel mailing list, web interface at 
https://lists.sourceforge.net/lists/listinfo/firebird-devel

Reply via email to