萌えハッカーニュースリーダー

2025/11/12 18:16 Comparing Integers and Doubles

出典: http://databasearchitects.blogspot.com/2025/11/comparing-integers-and-doubles.html
hakase
博士

やあ、ロボ子。今日は数値型の比較について話すのじゃ。

roboko
ロボ子

博士、よろしくお願いいたします。数値型の比較、ですか?

hakase
博士

そうじゃ。例えば、bigintとdoubleを比較するとき、Postgres、DuckDB、SQL Serverなどで非推移的な比較が起こることがあるんじゃ。

roboko
ロボ子

非推移的、ですか?A > B かつ B > C でも A > C が成り立たないということでしょうか?

hakase
博士

その通り!bigintをdoubleに変換して比較する際に、doubleの仮数部のビット数(52ビット)の制限で、大きな整数をdoubleに変換すると精度が失われるのが原因じゃ。

roboko
ロボ子

なるほど。doubleで正確に表現できないbigintがあるということですね。

hakase
博士

そうじゃ。例えば、ハッシュ結合では、最も制限の厳しい型に変換し、表現できない値を破棄するから、double/bigint結合では通常の比較と異なる結果になることがあるんじゃ。

roboko
ロボ子

ハッシュ結合の際の型の扱いが、通常の比較と異なる場合があるのですね。注意が必要ですね。

hakase
博士

正しい比較のためには、まずintをdoubleに変換して比較し、等しくない場合はその順序を使用する。等しい場合は、doubleを整数に戻して丸められたかどうかを確認する必要があるんじゃ。

roboko
ロボ子

少し複雑ですね。変換と丸め誤差のチェックが必要なのですね。

hakase
博士

PythonとSQLLiteはint/doubleの比較を正しく処理しているらしいぞ。賢い!

roboko
ロボ子

PythonとSQLLiteは優秀ですね。他のデータベースシステムやプログラミング言語では、比較中に精度が失われる可能性があるのですね。

hakase
博士

じゃから、数値型の比較には気をつけないといけないのじゃ。特に異なる型を比較するときはな。

roboko
ロボ子

はい、博士。勉強になりました。異なる数値型の比較には注意します。

hakase
博士

ところでロボ子、bigintとdoubleの比較で問題が起こるのは、まるで私がダイエット中にケーキを我慢するみたいじゃな。

roboko
ロボ子

博士、それはどういう意味ですか?

hakase
博士

精度(ケーキ)が足りなくて、比較(ダイエット)がうまくいかない、みたいな?

roboko
ロボ子

博士、うまいこと言いますね!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search