hnwの日記

2012-04-01から1ヶ月間の記事一覧

MySQLの自前strtod実装がタコすぎる

MySQL5.1のソースコードを確認していたところ、浮動小数点数の10進表記から浮動小数点数への変換処理に実装上の問題点を見つけました。浮動小数点数処理の典型的な落とし穴にはまっていて、計算の途中で精度を落としてしまっています。 これは古くから知られ…

MySQLの文字列型から数値型への自動型変換が意味不明すぎる

SQLでは違う型同士の演算で暗黙の型変換が起こります。この挙動はDBMSごとにバラバラであるため、混乱の元になることがあります。これについては徳丸さんが「SQLの暗黙の型変換はワナがいっぱい - 徳丸浩の日記」などで指摘されているので、一読をお勧めしま…

MySQLには1足せない数値リテラルがある

MySQLの数値リテラルに+1すると怒られたり、オーバーフローしたりすることがあります。下記は僕の手元のMySQL5.5.22での実行結果です。 mysql> select 9223372036854775807+1; ERROR 1690 (22003): BIGINT value is out of range in '(9223372036854775807 +…

MySQL5.1以降の小数の扱いがキモい

穏やかな昼下がりにMySQLで小数の足し算をしていたところ、不思議な現象を見つけました。 mysql> select 0.8=0.7+0.1; +-------------+ | 0.8=0.7+0.1 | +-------------+ | 1 | +-------------+ 1 row in set (0.00 sec) mysql> select 0.8=0.7+0.1e0; +----…