IEEE 754の単精度と倍精度のデータ型がどれほど優れているのかよく知っています。私はすべてのコンピュータ科学者が浮動小数点演算について知っておくべきことに関する記事を読んだが、私はPostgreSQLが作る選択について困惑している。PostgreSQLがフィルタリングするデータ型を決定する要因は何ですか?
gsh=# explain select count(*) from ttt where f4=12.206;
QUERY PLAN
----------------------------------------------------------
Aggregate (cost=23.77..23.78 rows=1 width=0)
-> Seq Scan on ttt (cost=0.00..23.75 rows=6 width=0)
Filter: (f4 = 12.206::double precision)
(3 rows)
:私は説明をお願い
select count(*) from ttt where f4=12.206;
count
-------
0
(1 row)
:
insert into ttt (f4,f8,fn) values(12.206,12.206,12.206);
私は、クエリを実行します。
は私が
create table ttt(f4 float4, f8 float8, fn numeric);
私はいくつかの値を追加するテーブルを作成します
したがって、照会では、1235のdouble precsionバージョン を単一の前提条件として格納された値に一致させようとしていますが、一致するのは ではありません。これは驚くべきことではありません。 12.206に対して を比較したフィルターではありませんなぜ
gsh=# select 12.206;
?column?
----------
12.206
(1 row)
gsh=# select pg_typeof(12.206);
pg_typeof
-----------
numeric
(1 row)
番号は、デフォルトでは、数値として扱われている場合:私には驚きは何
はデフォルトのPostgreSQLで が数値として数値を扱うように見えるので、ということです倍精度の代わりに数値として?私はこれが少なくとも驚きの違反だと思う。
どのような考えですか?