質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Q&A

解決済

1回答

1567閲覧

MySQLの計算精度とその挙動について

Gazelle

総合スコア136

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

0グッド

1クリップ

投稿2017/06/12 14:41

編集2017/06/12 15:34

ご覧いただきありがとうございます。MySQLでクエリ叩いてるときにふと思い立った疑問を質問します。

環境

mysql -Vの結果

mysql Ver 14.14 Distrib 5.7.18, for osx10.12 (x86_64) using EditLine wrapper

準備

まず、適当にデータベースを作って、テーブルを次のように作ります

CREATE TABLE my_tbl ( last_name VARCHAR(40), first_name VARCHAR(40), age INTEGER ); INSERT INTO my_tbl ( last_name, first_name, age ) VALUES ( 'yamada', 'tarou', 21 );

質問内容

ここで質問の内容ですが、次のようにデータを引っ張ってきます。

select * from my_tbl where 1 = 1;

これは、レコードが1つとれます。ここで、where の中の計算を例えば

select * from my_tbl where 1 = 0.99999999999,,,;

としたとき、where句の右辺が丸め込まれず正しく(?)評価されていると思います。

これは一体どういうことなのでしょう?予想では丸め込まれるところが出てくるのかと想像したのですが、ちょっと違ったので、挙動が知りたいです。

参考文献などもありますと幸いです。

よろしくお願いします。

追記

よくよく調べてみると、下記のリンクがほとんど答えですかね。。。

高精度計算では、可能な場合は常に、厳密値数値は与えられたとおりに使用されます。たとえば、比較での数値は、値を変更することなく正確に指定されたとおりに使用されます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2017/06/13 01:12

自己解決されたよう?なので追記内容を回答に移して、解決済みにしてください。
guest

回答1

0

ベストアンサー

浮動小数点処理については誤差がでるものだと認識するしかありません

SQL

1select (1/3*3),(1*3/3),(1/3*3)=1,(1*3/3)=1,(1/3*3)=(1*3/3) 2

同じようにみえて違います

投稿2017/06/13 01:16

編集2017/06/13 01:20
yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問