oracle中的双精度浮点,双精度扩展格式 (x86)
2.2.5 双精度扩展格式 (x86)
该浮点环境双精度扩展格式符合双精度扩展格式的 IEEE 定义。 它包含四个字段:63 位 小数 f;1 位显式前导有效数位 j;15 位偏置指数 e 以及 1 位符号 s。 此格式不能作为语言类型用于 Oracle Solaris Studio Fortran 或 SPARC 的 C/C++。
在 x86 体系结构系列中,这些字段连续存储在十个相连地址的 8 位字节中。然而,由于 UNIX System V Application Binary Interface Intel 386 Processor Supplement (Intel ABI) 要求双精度扩展参数,从而占用堆栈中三个相连地址的 32 位字,其中地址最高字的 16 位最高有效位未用,如下图所示。
地址最低的 32 位字包含小数的 32 位最低有效位 f[31:0],其中第 0 位是整个小数的最低有效位,而第 31 位则是 32 位最低有效位的最高有效位。地址居中的 32 位字中,0:30 位包含小数的 31 位最高有效位 f[62:32],其中第 0 位是这 31 位最高有效位的最低有效位,而第 30 位是整个小数的最高有效位;地址居中 32 位字的第 31 位包含显式前导有效数位 j。
地址最高的 32 位字中,0:14 位包含 15 位偏置指数 e,其中第 0 位是该偏置指数的最低有效位,而第 14 位是最高有效位;第 15 位包含符号位 s。 虽然地址最高的 32 位字的最高 16 位未被 x86 体系结构系列使用,但如上所述,它们符合 Intel ABI 规定,这是至关重要的。
下图将这三个连续的 32 位字按一个 96 位字那样进行了编号,其中 0:62 位存储 63 位小数 f;第 63 位存储显式前导有效数位 j;64:78 位存储 15 位偏置指数 e;第 79 位存储符号位 s。
图 2-4双精度扩展格式 (x86)
f、j、e 和 s 四个字段中的位模式值将决定整个位模式所表示的值。
Table 2–8 显示了四个组成字段的计数值与该位模式表示的值之间的对应关系。u 意味着所指示的字段的值与确定特定位模式的值无关。
表 2-8位模式表示的值 (x86)
双精度扩展位模式 (x86)
值
j = 0, 0 < e <32767
不支持
j = 1, 0 < e < 32767
(–1)s × 2e–16383 × 1.f(正规数)
j = 0, e = 0; f ≠ 0
(f 中至少有一位不为零)
(–1)s × 2–16382 × 0.f(次正规数)
j = 1, e = 0
(–1)s × 2–16382 × 1.f(伪非正规数)
j = 0, e = 0, f = 0
(f 中的所有位均为零)
(–1)s × 0.0(有符号的零)
j = 1; s = 0; e = 32767; f = 0(f 中的所有位均为零)
+INF(正无穷大)
j = 1; s = 1; e = 32767; f = 0(f 中的所有位均为零)
–INF(负无穷大)
j = 1; s = u; e = 32767; f = .1uuu — uu
QNaN(quiet NaN,静态 NaN)
j = 1; s = u; e = 32767; f = .0uuu — uu ≠ 0
(f 中至少一个 u 不为零)
SNaN(signaling NaN,信号 NaN)
请注意,双精度扩展格式的位模式没有显式前导有效数位。在双精度扩展格式中,将前导有效数位显式指定为单独的字段 j。但当 e ≠ 0 时,将不支持任何 j = 0 的位模式,这是因为将这种位模式用作浮点运算中的操作数将导致无效的运算异常。
将双精度扩展格式中的分立字段 j 和 f 连接起来称为有效数字。当 e < 32767 和 j = 1 时,或当 e = 0 和 j = 0 时,有效数字是通过以下方法形成的:在前导有效数位 j 和小数的最高有效位之间插入二进制基数点。
在 x86 双精度扩展格式中,前导有效数位 j 是 0 并且偏置指数字段 e 也是 0 的位模式表示次正规数,而前导有效数位 j 是 1 并且偏置指数字段 e 是非零数的位模式表示正规数。由于前导有效数位是显式表示的,而不是从指数的值推导出来的,所以该格式还接受偏置指数是 0(与次正规数相似),而前导有效数位是 1 的位模式。每一个这样的位模式实际上都与对应的偏置指数字段是 1 的位模式表示相同的值,即正规数,因此位模式称为伪非正规数。在 IEEE 标准 754-1985 中,次正规数称为非正规数。伪非正规数仅是一个 x86 双精度扩展格式编码的人为概念,当显示为操作数时,您可以将其隐式转换为相应的正规数,不能将其生成为结果。
表 2-9双精度扩展格式位模式及其值 (x86)
公用名称
位模式 (x86)
十进制值
+0
0000 00000000 00000000
0.0
–0
8000 00000000 00000000
–0.0
1
3fff 80000000 00000000
1.0
2
4000 80000000 00000000
2.0
最大正规数
7ffe ffffffff ffffffff
1.18973149535723176505e+4932
最小正正规数
0001 80000000 00000000
3.36210314311209350626e–4932
最大次正规数
0000 7fffffff ffffffff
3.36210314311209350608e–4932
最小正次正规数
0000 00000000 00000001
3.64519953188247460253e–4951
+∞
7fff 80000000 00000000
+∞
–∞
ffff 80000000 00000000
–∞
带有最大小数的静态 NaN
7fff ffffffff ffffffff
QNaN
带有最小小数的静态 NaN
7fff c0000000 00000000
QNaN
带有最大小数的信号 NaN
7fff bfffffff ffffffff
SNaN
带有最小小数的信号 NaN
7fff 80000000 00000001
SNaN
上表中给出了重要的双精度扩展存储格式位模式的示例。第二列中的位模式显示为一个 4 位十六进制数,它是地址最高的 32 位字的 16 位最低有效位的值(请记住,上述该地址最高的 32 位字的 16 位最高有效位是未用的,所以未显示其值),后面是两个 8 位十六进制数,其中左侧是地址居中的 32 位字的值,右侧是地址最低的 32 位字的值。最大正正规数是以 x86 双精度扩展格式表示的最大有限数。最小正次正规数是以双精度扩展格式表示的最小正数。最小正正规数通常称为下溢阈值。最大和最小正规数和次正规数的十进制值是近似的;对于所示的数字来说,它们是正确的。
NaN(Not a Number,非数)可以用任何满足 NaN 定义的位模式表示。上表中的 NaN 十六进制值显示出,小数字段的前导位(最高有效位)决定 NaN 是静态 NaN(前导小数位 = 1)还是信号 NaN(前导小数位= 0)。
oracle中的双精度浮点,双精度扩展格式 (x86)相关推荐
- oracle中set怎么用,sqlplus命令格式以及sqlplus中set的用法与解释-Oracle
sqlplus命令格式以及sqlplus中set的用法与解释 [oracle@oracle02 username]$ sqlplus –help SQL*Plus: Release 9.2.0.4.0 ...
- c oracle格式化时间,JAVA和ORACLE中的日期格式
报表中同时用到了从JAVA中取得的日期和从ORACLE中取得的日期,日期格式必须统一. 1.JAVA中,我用SimpleDateFormat()格式化日期,语法如下: SimpleDateFormat ...
- oracle中的to_number,Oracle中to_number()函数的用法
to_number()函数是oracle中常用的类型转换函数之一,是将一些处理过的按一定格式编排过的字符串变回数值型的格式. 1.to_number()函数可以将char或varchar2类型的str ...
- Oracle中to_char函数和MySQL中的str_to_date函数区别
标题Oracle中to_char函数和MySQL中的str_to_date函数 1. str_to_date()----->相当于Oracle中的to_char(): 字符串转换为日期格式 (1 ...
- oracle中rollback用法,Oracle中SAVEPOINT和ROLLBACK用法
savepoint是事务内部允许部分rollback的标志符.因为事务中对记录做了修改,我们可以在事务中创建savepoint来标识不同的点.如果遇到错误,就可以rollback到不同的点或直接回来事 ...
- python 双精度浮点_Python双精度浮点数运算并分行显示操作示例
Python双精度浮点数运算并分行显示操作示例 这篇文章主要介绍了Python双精度浮点数运算并分行显示操作,涉及Python数学运算及显示相关操作技巧,注释备有详尽的说明,需要的朋友可以参考下 #c ...
- float单精度浮点和double双精度浮点
1.在内存中占有的字节数不同 单精度浮点数占4个字节 双精度浮点数占8个字节 2.有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 3.所能表示数的范围不同 单精度浮点的表示范围 ...
- oracle将字符串前移,将字符串转换为oracle中的格式编号
我正在使用Oracle 10g并具有数据库列Q1的数据类型为varchar2的数据库.该列主要保存float和int值.将字符串转换为oracle中的格式编号 我想运行一个查询,将获取值,但具有标准美 ...
- Oracle中TO_DATE格式
Year: yy two digits 两位年 显示值:07 yyy three digits 三位年 ...
最新文章
- 国赛来咯,全国大学生智能汽车竞赛百度赛道正式开启
- 程序员的共鸣 - 读《卓有成效的程序员》
- IT兄弟连 Java语法教程 Java的发展历程
- 属性总结(四):linestyle
- Eigen--.block(i,j,p,q)
- Ubuntu16.04 Oracle JDK8和Open JDK8的安装与配置
- css倒序循环,不借助后台和 JS ,只用 CSS 让一个列表编号倒序
- U盘插入电脑无反应,坏了?不存在的
- linux学习之文件操作
- 男人想要成功--必须明白的22个道理
- 工业物联网网关 数据采集网关
- php公众号客服系统,公众号客服系统完全攻略
- SQLite3 数据库全文搜索 - SQL Server - 红黑联盟
- 如何看linux网络慢,Linux下网速慢的问题
- linux grep,sed和awk常用操作
- 【个人学年总结】大一——“蛰伏”的一年
- redis之复制之谜(二)
- 02-leveldb入门
- 八人抢答器讲解_8人抢答器的制作原理和过程说明是怎样的?
- 奥特曼系列ol以前的服务器恢复,奥特曼系列ol怎么看之前登录过的大区
热门文章
- excel 电阻并联计算_3个并联电阻计算公式 并联电阻计算公式计算方法
- 【Python】python 字符串转数组
- python爬取网易词典,利用Python3和Charles爬取有道词典
- 研究了一下WMF图片格式,应该是CYMK
- 计算机网络传输层之SR协议
- Media Player Classic - HC 源代码分析 14:PIN连接过程中推模式和拉模式区别
- Activity详解2
- linux远程可视化
- Python数据结构20:动态规划:找零兑换问题的动态规划解法并显示使用的硬币组合
- Super-Auto-Refresh_v2.5.1实现谷歌浏览器定时刷新