Oracle数据库浮动类型限制

Oracle数据库浮动类型限制,oracle,floating-point,Oracle,Floating Point,我不确定我可以在oracle数据库中存储以下列类型的最大和最小正值:FLOAT、BINARY\u FLOAT和BINARY\u DOUBLE 我在oracle参考文档中找不到该信息。有人能帮我吗?根据另一篇帖子: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是: 999999999999999999999999999999999999999999 这是我能在那里输入的最大数字。在那之后,指数者接手了。” 从另一篇文章中: “Ora

我不确定我可以在oracle数据库中存储以下列类型的最大和最小正值:FLOAT、BINARY\u FLOAT和BINARY\u DOUBLE

我在oracle参考文档中找不到该信息。有人能帮我吗?

根据另一篇帖子: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是:

999999999999999999999999999999999999999999

这是我能在那里输入的最大数字。在那之后,指数者接手了。” 从另一篇文章中: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是:

999999999999999999999999999999999999999999

这是我能在那里输入的最大数字。在那之后,指数者接手了。”

中,我使用以下脚本测试三种数据类型的最大值:

declare
  x  float         := 0;
  xx float         := 1;
  y  binary_float  := 0;
  yy binary_float  := 1;
  z  binary_double := 0;
  zz binary_double := 1;
begin
  <<outx>> loop loop if x+xx = x then exit outx; end if; if x+xx is not infinite then x:=x+xx; xx:=xx*2; else exit; end if; end loop; xx:=xx/2; end loop;
  <<outy>> loop loop if y+yy = y then exit outy; end if; if y+yy is not infinite then y:=y+yy; yy:=yy*2; else exit; end if; end loop; yy:=yy/2; end loop;
  <<outz>> loop loop if z+zz = z then exit outz; end if; if z+zz is not infinite then z:=z+zz; zz:=zz*2; else exit; end if; end loop; zz:=zz/2; end loop;
  dbms_output.put_line('float='||x);
  dbms_output.put_line('binary_float='||y);
  dbms_output.put_line('binary_double='||z);
end;
/
要测试我使用的最小正值,请执行以下操作:

declare
  x  float         := 1;
  xx float         := .5;
  y  binary_float  := 1;
  yy binary_float  := .5;
  z  binary_double := 1;
  zz binary_double := .5;
begin
  <<outx>> loop loop if 1-xx > 0 and x*(1-xx) = x then exit outx; end if; if 1-xx > 0 and x*(1-xx) > 0 then x:=x*(1-xx); xx:=xx*2; else exit; end if; end loop; xx:=xx/2; end loop;
  <<outy>> loop loop if 1-yy > 0 and y*(1-yy) = y then exit outy; end if; if 1-yy > 0 and y*(1-yy) > 0 then y:=y*(1-yy); yy:=yy*2; else exit; end if; end loop; yy:=yy/2; end loop;
  <<outz>> loop loop if 1-zz > 0 and z*(1-zz) = z then exit outz; end if; if 1-zz > 0 and z*(1-zz) > 0 then z:=z*(1-zz); zz:=zz*2; else exit; end if; end loop; zz:=zz/2; end loop;
  dbms_output.put_line('float='||x);
  dbms_output.put_line('binary_float='||y);
  dbms_output.put_line('binary_double='||z);
end;
/

我使用以下脚本测试了三种数据类型的最大值:

declare
  x  float         := 0;
  xx float         := 1;
  y  binary_float  := 0;
  yy binary_float  := 1;
  z  binary_double := 0;
  zz binary_double := 1;
begin
  <<outx>> loop loop if x+xx = x then exit outx; end if; if x+xx is not infinite then x:=x+xx; xx:=xx*2; else exit; end if; end loop; xx:=xx/2; end loop;
  <<outy>> loop loop if y+yy = y then exit outy; end if; if y+yy is not infinite then y:=y+yy; yy:=yy*2; else exit; end if; end loop; yy:=yy/2; end loop;
  <<outz>> loop loop if z+zz = z then exit outz; end if; if z+zz is not infinite then z:=z+zz; zz:=zz*2; else exit; end if; end loop; zz:=zz/2; end loop;
  dbms_output.put_line('float='||x);
  dbms_output.put_line('binary_float='||y);
  dbms_output.put_line('binary_double='||z);
end;
/
要测试我使用的最小正值,请执行以下操作:

declare
  x  float         := 1;
  xx float         := .5;
  y  binary_float  := 1;
  yy binary_float  := .5;
  z  binary_double := 1;
  zz binary_double := .5;
begin
  <<outx>> loop loop if 1-xx > 0 and x*(1-xx) = x then exit outx; end if; if 1-xx > 0 and x*(1-xx) > 0 then x:=x*(1-xx); xx:=xx*2; else exit; end if; end loop; xx:=xx/2; end loop;
  <<outy>> loop loop if 1-yy > 0 and y*(1-yy) = y then exit outy; end if; if 1-yy > 0 and y*(1-yy) > 0 then y:=y*(1-yy); yy:=yy*2; else exit; end if; end loop; yy:=yy/2; end loop;
  <<outz>> loop loop if 1-zz > 0 and z*(1-zz) = z then exit outz; end if; if 1-zz > 0 and z*(1-zz) > 0 then z:=z*(1-zz); zz:=zz*2; else exit; end if; end loop; zz:=zz/2; end loop;
  dbms_output.put_line('float='||x);
  dbms_output.put_line('binary_float='||y);
  dbms_output.put_line('binary_double='||z);
end;
/

这很容易找到-最小的阳性还是阴性?很容易找到-最小的阳性还是阴性?。上面提到了。指数是可以的,它们有助于在浮点数据类型中存储更大的数字。。这一点已经提到了。指数是可以的,它们有助于在浮点数据类型中存储更大的数字。