[ 
https://issues.apache.org/jira/browse/DERBY-6017?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13536050#comment-13536050
 ] 

Bryan Pendleton commented on DERBY-6017:
----------------------------------------

A little bit of quick searching confirms my suspicion that most databases have 
this problem,
and that comparison of floating point values can lead to confusing results:

http://stackoverflow.com/questions/2567434/mysql-floating-point-comparison-issues

http://yongjun-jiao.blogspot.com/2011/11/floating-point-number-equality.html

https://kb.askmonty.org/en/numeric-operations/

It might be worth, as a related issue or sub-task, considering ways to improve 
our
documentation in this area so that we guide users toward safer ways of comparing
floating point values, e.g., some form of:

    WHERE ABS(float_column - other_value) < small_epsilon

with an appropriate suggestion for what small_epsilon should be.

                
> IN lists with constants may return wrong results
> ------------------------------------------------
>
>                 Key: DERBY-6017
>                 URL: https://issues.apache.org/jira/browse/DERBY-6017
>             Project: Derby
>          Issue Type: Bug
>          Components: SQL
>    Affects Versions: 10.9.1.0
>            Reporter: Knut Anders Hatlen
>            Assignee: Knut Anders Hatlen
>
> Given this table:
> ij> connect 'jdbc:derby:memory:db;create=true';
> ij> create table t(x bigint);
> 0 rows inserted/updated/deleted
> ij> insert into t values 9223372036854775805, 9223372036854775806, 
> 9223372036854775807;
> 3 rows inserted/updated/deleted
> A query that uses an IN list that contains all the three values actually 
> stored in the table, returns all three rows as expected:
> ij> select * from t where x in (9223372036854775805, 9223372036854775806, 
> 9223372036854775807);
> X                   
> --------------------
> 9223372036854775805 
> 9223372036854775806 
> 9223372036854775807 
> 3 rows selected
> However, if we add a value whose type precedence is higher, like a DOUBLE 
> value, and that value happens to be equal to the approximation of the other 
> values in the IN list when they are cast from BIGINT to DOUBLE, only one row 
> is returned:
> ij> select * from t where x in (9223372036854775805, 9223372036854775806, 
> 9223372036854775807, 9.223372036854776E18);
> X                   
> --------------------
> 9223372036854775805 
> 1 row selected
> I believe this query should return all three rows too.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to