2012-02-17 36 views
3

我有一張滿10位整數的表格,並且認爲通過將它們存儲爲BINARY_FLOAT可以加快Oracle中的查詢/數學運算速度。這比NUMBER更友善,不會佔用太多空間(我認爲),這意味着更多的內存數據。Oracle BINARY_FLOAT:2個整數給出相同的值?

但是,看起來BINARY_FLOAT對於兩個不同的數字產生相同的字節(並因此產生值)......這顯然不起作用。

例子:

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,25185387 * 1.0,to_number(25185387)等。

當我閱讀文檔時,BINARY_FLOAT應該存儲到1.79e308,所以它不能是舍入問題。

我在64位平臺上使用Oracle 11.2.0.3。

想法?謝謝。

回答

3

由於oracle的實現是BINARY_FLOAT標準ieee 754. BINARY_FLOAT與singe相同。

單個只有23位用於有效位。

25185387 = 11000000001001100011010 (長度= 25)

25185388 = 11000000001001100011011 (長度= 25)

因此這些預言輪的重要性,丟棄至少顯著位

25185387〜11000000001001100011011 * 2^2

25185388〜11000000001001100011011 * 2^2

所以得到相同的值

+0

有趣......在Oracle文檔... http://docs.oracle.com/cd/E11882_01/server.112/e26088/sql_elements001.htm#i140176 ...說一個BINARY_FLOAT有一個3.40282E + 38F的「最大正的有限值」(我之前誤解了)。 所以我假設我可以存儲一個數字達到這個大小。現在我明白你的意思了。 那麼我可以存儲的最大整數是2^23? 再次感謝您的好評。 – raindog308 2012-02-17 18:25:29

+0

2^23沒有失去精度。四捨五入隨着增加而發生。指定位以[規範化形式]保存(http://en.wikipedia.org/wiki/Normalized_number)。 Oracle還以8位(指數符號+7位)存儲編號的「exponent」分量。最大數目= 2 ^(2^7)* 1.111..111≈3.4 * 10^38 – turbanoff 2012-02-17 21:59:27

相關問題