float与double的范围和精度.doc

上传人:灯火****19 文档编号:134975610 上传时间:2020-06-10 格式:DOC 页数:2 大小:30KB
返回 下载 相关 举报
float与double的范围和精度.doc_第1页
第1页 / 共2页
float与double的范围和精度.doc_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《float与double的范围和精度.doc》由会员分享,可在线阅读,更多相关《float与double的范围和精度.doc(2页珍藏版)》请在金锄头文库上搜索。

1、float与double的范围和精度1. 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位) 8bits(指数位) 23bits(尾数位)double:1bit(符号位) 11bits(指数位) 52bits(尾数位)于是,float的指数范围为-127+128,而double的指数范围为-1023+1024,并且指数位是按补码的形式来划分的。其中负指数决定了浮点数所能表达的绝对值最小的非零数;而正指数决定了浮点数所能表达的绝对值最大的数,也即决定了浮点数的取值范围。float的范围为-2

2、128 +2128,也即-3.40E+38 +3.40E+38;double的范围为-21024 +21024,也即-1.79E+308 +1.79E+308。2. 精度float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。float:223 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为67位有效数字;double:252 = 4503599627370496,一共16位,同理,double的精度为1516位。3.Oracl

3、e中Number类型在Oracle中Number类型可以用来存储0,正负定点或者浮点数,可表示的数据范围在1.0 * 10(-130) 9.9.9 * 10(125) 38个9后边带88个0的数字,当Oracle中的数学表达式的值=1.0*10(126)时,Oracle就会报错。Number的数据声明如下:表示 作用 说明Number(p, s) 声明一个定点数 p(precision)为精度,s(scale)表示小数点右边的数字个数,精度最大值为38,Number(p) 声明一个整数 相当于Number(p, 0)Number 声明一个浮点数 其精度为38,要注意的是scale的值没有应用,

4、也就是说scale的指不能简单的理解为0,或者其他的数。定点数的精度(p)和刻度(s)遵循以下规则:? 当一个数的整数部分的长度 p-s 时,Oracle就会报错? 当一个数的小数部分的长度 s 时,Oracle就会舍入。? 当s(scale)为负数时,Oracle就对小数点左边的s个数字进行舍入。? 当s p 时, p表示小数点后第s位向左最多可以有多少位数字,如果大于p则Oracle报错,小数点后s位向右的数字被舍入4.验证create or replace function func_test(p_type number) return numberis/*功能:基于警度图数据同步*/l

5、_cnt number;beginselect p_type into l_cnt from dual;return l_cnt;end func_test;/show err;5.结论number 的总长度是40位,其中可能包括:小数点,负号位。select to_char(func_test(-987.1234567891234567891234567891234567891234) from dual;-987.12345678912345678912345678912345679 /包括小数点及负号位共40位select to_char(func_test(9876.123456789

6、1234567891234567891234567891234) from dual;9876.12345678912345678912345678912345679 /4位整数+小数点+35位小数=40位select to_char(func_test(987.1234567891234567891234567891234567891234) from dual;987.123456789123456789123456789123456789 /3位整数+小数点+36位小数=40位select to_char(func_test(1234567891234567891234567891234567891234) from dual;1234567891234567891234567891234567891234 /40位整数select to_char(func_test(12345678912345678912345678912345678912345) from dual;1.2345678912345678912345678912345679E+40 /41位时精度发生丢失1.23456789123456789123456789123456791040 即 12345678912345678912345678912345678900000

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号