私は10桁の整数からなるテーブルを持っており、BINARY_FLOATとして保存することでOracleのクエリ/演算処理を高速化することを考えました。それはNUMBERよりもCPUにやさしく、メモリを増やすという意味で多くのスペースをとらない(私は思う)。Oracle BINARY_FLOAT:2つの整数は同じ値ですか?
しかし、BINARY_FLOATは2つの異なる数字に対して同じバイト(したがって値)を生成するように見えますが...明らかに機能しません。
例:
私は浮動小数点に入った場合、私はいくつかの問題を抱えているかもしれないが、これらは整数であることが期待SQL> select dump(to_binary_float(25185387)) from dual;
DUMP(TO_BINARY_FLOAT(2518538
----------------------------
Typ=100 Len=4: 203,192,38,54
SQL> select dump(to_binary_float(25185388)) from dual;
DUMP(TO_BINARY_FLOAT(2518538
----------------------------
Typ=100 Len=4: 203,192,38,54
SQL> CREATE TABLE blah (somenum BINARY_FLOAT);
Table created.
SQL> insert into blah (somenum) values (25185387);
1 row created.
SQL> insert into blah (somenum) values (25185388);
1 row created.
SQL> select somenum from blah;
SOMENUM
----------
2.519E+007
2.519E+007
SQL> select to_number(somenum) from blah;
TO_NUMBER(SOMENUM)
------------------
25185388
25185388
SQL> select dump(somenum) from blah;
DUMP(SOMENUM)
------------------------------------------------------------------------------------------------------------------------
Typ=100 Len=4: 203,192,38,54
Typ=100 Len=4: 203,192,38,54
。私は、様々な呪文を試してみた - など25185387f、25185387.0、* 1.0 25185387、TO_NUMBER(25185387)、
私はドキュメントを読んで、それを丸め問題になることはできませんので、BINARY_FLOATは、1.79e308に格納する必要があります。
私は64ビットプラットフォームでOracle 11.2.0.3を使用しています。
アイデア?ありがとう。
興味深い... Oracleのドキュメント... http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i140176 ... BINARY_FLOATには、「最大正の有限値」が3.40282E + 38F(私は先にmispastedしていた)と言います。 私はそのサイズまでの番号を保存できると仮定していました。今あなたが何を意味するかを見ます。 2^23を格納できる最大の整数は? 偉大な答えを再度ありがとう。 – raindog308
2^23精度を損なうことなく丸めは増加すると発生します。記号ビットは[正規化フォーム]に保存されます(http://en.wikipedia.org/wiki/Normalized_number)。また、Oracleは数値の「指数」コンポーネントを8ビット(指数記号+ 7ビット)で格納します。最大数= 2 ^(2^7)* 1.111..111≒3.4 * 10^38 – turbanoff