现在的位置: 首页 > 综合 > 正文

MainFrame知识小结(20120117)—浮点数

2013年07月28日 ⁄ 综合 ⁄ 共 1212字 ⁄ 字号 评论关闭

概述

   浮点数float)是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体来说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次得到,这种表示方法类似于基数为10科学记数法

  IBM
MainFrame
中浮点数的存储格式并不是按照IEEE
754
标准。虽然原理相类,但细节不同。

  对于COBOLHLASM来说,只有浮点数是带有小数位的运算。其它运算都是按整数运算,比如PIC
9(8).9(3)
,实际上小数点是不会出现在内存中。

 

类型

类型

长度

COBOL类型

短数

4Byte

COMP-1

长数

8Byte

COMP-2

扩展数

16Byte

COBOL好像没有对应的类型

 






结构

符号位

阶码

尾数

  


  符号位(sign)

  符号位为浮点数的第一个bit0为正,1为负。

 

  阶码(exponent)

  阶码为紧跟符号位的7bit,范围就是[027-1],为了表示正负,该范围实际上是减去64的,也就是[-6463]

 

  尾数(mantissa)

  尾数是紧跟阶码的剩余bits。对于短数来说是24bit;对于长数56bit;对于扩展数有点特别,第二个双字开始8bit不使用的所以尾数有56*2bit。尾数的最开始默认就是有一小数点的!

   短数

1bit

7bit

24bit

 


        长数

1bit

7bit

56bit

 

   

        扩展数

1bit

7bit

56bit

8bit

56bit

 


例子

  以下例子都以短浮点数为例,长浮点数和扩展浮点数可以此类推

  1.浮点数+133

    x'42
85 00 00'

    b'0100001010000101
00000000 00000000
'

  • 第一位为0,则为正数
  • 紧跟的7位为100010(2),即66(10),实际就是66-64=2注意这里是十进制的!

  • 最后24位为x'850000',即0.85(16)

  • 0.85*162
    = 85
    (16)
    = 133
    (10)

 

  2.浮点数-0.03125

    x'BF
80 00 00'

    b'1011111110000000
00000000 00000000
'

  • 第一位为1,则为负数

  • 紧跟的7位为0111111(2),即63(10),实际就是63-64=-1

  • 最后24位为x'800000',即0.8(16)

  • -0.8*16-1
    = 0.08
    (16)
    = -0.03125
    (10)

 

参考

  (1)IBM高校合作课程:第二章 S390内存使用:

  http://ibmur.hust.edu.cn/ZOS-ASM/

  (2)How
exactly do floating-point fields work?

  http://www.tek-tips.com/faqs.cfm?fid=5154

  (3)维基百科

  http://zh.wikipedia.org/wiki/%E6%B5%AE%E7%82%B9%E6%95%B0

抱歉!评论已关闭.