Oracle二进制浮点:2个整数给出相同的值?
我有一个满是10位整数的表,我想通过将它们存储为二进制浮点数来加速Oracle中的查询/数学运算。这比数字对CPU更友好,不会占用太多空间(我认为),这意味着内存中会有更多数据 然而,二进制浮点数似乎会为两个不同的数字产生相同的字节(以及相应的值),这显然是行不通的 例如:Oracle二进制浮点:2个整数给出相同的值?,oracle,oracle11g,Oracle,Oracle11g,我有一个满是10位整数的表,我想通过将它们存储为二进制浮点数来加速Oracle中的查询/数学运算。这比数字对CPU更友好,不会占用太多空间(我认为),这意味着内存中会有更多数据 然而,二进制浮点数似乎会为两个不同的数字产生相同的字节(以及相应的值),这显然是行不通的 例如: SQL> select dump(to_binary_float(25185387)) from dual; DUMP(TO_BINARY_FLOAT(2518538 ------------------------
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_数字(25185387)等等
当我阅读文档时,二进制浮点数应该存储到1.79e308,所以它不会是一个舍入问题
我正在64位平台上使用Oracle 11.2.0.3
想法?谢谢。因为oracle的实现是二进制浮点标准ieee 754。二进制浮点数与相同 单个有效位只有23位 25185387=1100000000100110001101011(长度=25) 25185388=1100000000100110001101101100(长度=25) 因此,这些oracle循环的重要性在于丢弃最低有效位 25185387~11000000001001100011011011*2^2 25185388~11000000001001100011011011*2^2
所以得到相同的值有趣的…Oracle文档。。。假设一个二进制浮点数的“最大正有限值”为3.40282E+38F(我之前错放了)。所以我假设我可以储存一个这么大的号码。现在我明白你的意思了。那么,我能存储的最大整数是2^23吗?再次感谢您的精彩回答。2^23不失精准。四舍五入是随着时间的增加而发生的。意义位保存在。Oracle还以8位(指数符号+7位)存储数字的
指数
分量。最大数量=2^(2^7)*1.111..111≈ 3.4 * 10^38