Oracle数据库浮动类型限制
我不确定我可以在oracle数据库中存储以下列类型的最大和最小正值:FLOAT、BINARY\u FLOAT和BINARY\u DOUBLE 我在oracle参考文档中找不到该信息。有人能帮我吗?根据另一篇帖子: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是: 999999999999999999999999999999999999999999 这是我能在那里输入的最大数字。在那之后,指数者接手了。” 从另一篇文章中: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是: 999999999999999999999999999999999999999999 这是我能在那里输入的最大数字。在那之后,指数者接手了。”Oracle数据库浮动类型限制,oracle,floating-point,Oracle,Floating Point,我不确定我可以在oracle数据库中存储以下列类型的最大和最小正值:FLOAT、BINARY\u FLOAT和BINARY\u DOUBLE 我在oracle参考文档中找不到该信息。有人能帮我吗?根据另一篇帖子: “Oracle可以存储这么大(和这么小)的数字,但最多只能存储38位有效数字。因此,数字字段中可以存储的最大值是: 999999999999999999999999999999999999999999 这是我能在那里输入的最大数字。在那之后,指数者接手了。” 从另一篇文章中: “Ora
在中,我使用以下脚本测试三种数据类型的最大值:
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;
/
这很容易找到-最小的阳性还是阴性?很容易找到-最小的阳性还是阴性?。上面提到了。指数是可以的,它们有助于在浮点数据类型中存储更大的数字。。这一点已经提到了。指数是可以的,它们有助于在浮点数据类型中存储更大的数字。