gpt4 book ai didi

Oracle BINARY_FLOAT : 2 integers give same value?

转载 作者:行者123 更新时间:2023-12-02 13:24:12 24 4
gpt4 key购买 nike

我有一个充满 10 位整数的表,并想通过将它们存储为 BINARY_FLOAT 来加速 Oracle 中的查询/数学运算。这比 NUMBER 对 CPU 更友好,并且不会占用太多空间(我认为),这意味着内存中的数据更多。

但是,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。

想法?谢谢。

最佳答案

由于oracle的实现是BINARY_FLOAT标准ieee 754。BINARY_FLOAT与singe相同.

single 只有 23 位有效位。

25185387 = 11000000001001100011010 11(长度 = 25)

25185388 = 11000000001001100011011 00(长度 = 25)

因此这些预言轮的重要性,丢弃最低有效位

25185387 ~ 11000000001001100011011 * 2^2

25185388 ~ 11000000001001100011011 * 2^2

所以得到相同的值

关于Oracle BINARY_FLOAT : 2 integers give same value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9324470/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com