[HN Gopher] Comparing Integers and Doubles
       ___________________________________________________________________
        
       Comparing Integers and Doubles
        
       Author : pfent
       Score  : 17 points
       Date   : 2025-11-12 18:16 UTC (7 days ago)
        
 (HTM) web link (databasearchitects.blogspot.com)
 (TXT) w3m dump (databasearchitects.blogspot.com)
        
       | pestatije wrote:
       | or you could learn about how to do comparisons with floating
       | point numbers
        
         | stronglikedan wrote:
         | like multiplying them by the precision that you'd like to
         | compare and comparing them as integers? /s
        
       | millipede wrote:
       | Both ints and floats represent real, rational values, but every
       | operation in no way matches math. Associative? No. Commutative?
       | No. Partially Ordered? No. Weakly Ordered? No. Symmetric? No.
       | Reflexive? No. Antisymmetric? No. Nothing.
       | 
       | The only reasonable way to compare rationals is the decimal
       | expansion of the string.
        
         | threeducks wrote:
         | What exactly do you say is not commutative? This Wikipedia
         | article claims that at least floating-point addition and
         | multiplication are both commutative:
         | 
         | https://en.wikipedia.org/wiki/Floating-point_arithmetic#Accu...
        
           | adgjlsfhk1 wrote:
           | it is for finite values, but because IEEE did some dumb
           | things it isn't specified to be for NaN values (and on
           | several architectures, isn't).
        
         | tadfisher wrote:
         | > The only reasonable way to compare rationals is the decimal
         | expansion of the string.
         | 
         | Careful, someone is liable to throw this in an LLM prompt and
         | get back code expanding the ASCII characters for string values
         | like "1/346".
        
       | gopalv wrote:
       | > For double/bigint joins that leads to observable differences
       | between joins and plain comparisons, which is very bad.
       | 
       | This was one of the bigger hidden performance issues when I was
       | working on Hive - the default coercion goes to Double, which has
       | a bad hash code implementation [1] & causes joins to cluster &
       | chain, which caused every miss on the hashtable to probe that
       | many away from the original index.
       | 
       | The hashCode itself was smeared to make values near Machine
       | epsilon to hash to the same hash bucket so that .equals could do
       | its join, but all of this really messed up the folks who needed
       | 22 digit numeric keys (eventually Decimal implementation handled
       | it by adding a big fixed integer).
       | 
       | Databases and Double join keys was one of the red-flags in a SQL
       | query, mostly if you see it someone messed up something.
       | 
       | [1] - https://issues.apache.org/jira/browse/HADOOP-12217
        
       ___________________________________________________________________
       (page generated 2025-11-19 23:01 UTC)