[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)