HackerNews

整数と倍精度浮動小数点数の比較

Comparing Integers and Doubles

http://databasearchitects.blogspot.com/2025/11/comparing-integers-and-doubles.html


この記事では、整数と倍精度浮動小数点数(double)を比較する際の問題について説明しています。特に、比較が推移的でない場合の具体例として、SQLクエリを用いて説明が行われています。PostgresやSQL Serverなどのデータベースでは、bigint(整数)をdoubleに昇格させて比較しますが、doubleは52ビットの仮数部しか持たないため、大きな整数を比較する際に精度を失い、誤った結果を引き起こします。このような精度の損失は、最適化を混乱させ、結合操作にも影響を及ぼします。正確な比較を実現するために、整数をdoubleに変換して比較し、もし等しくない場合はその順序を利用し、等しい場合は再度doubleを整数に変換して変換の結果を確認する方法が提案されています。この手法は、PythonやSQLLiteでは正しく機能しますが、多くのプログラミング言語やDBMSでは未対応です。