200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 计算机组成 规格化数 计算机组成原理 关于数据规格化浮点数的编码问题

计算机组成 规格化数 计算机组成原理 关于数据规格化浮点数的编码问题

时间:2020-08-23 02:34:32

相关推荐

计算机组成 规格化数 计算机组成原理 关于数据规格化浮点数的编码问题

-07-02 回答

若不对浮点数的表示作出明确规定,同一个浮点数的表示就不是唯一的。例如,十进制数可以表示成1.11×10ˇ0,0.111×10ˇ1,0.0111×10ˇ2等多种形式。为了提高数据的表示精度,当尾数得值不为0时,尾数域的最高有效位应为1,这称为浮点数的规格化表示。否则以修改阶码同时左右移小数点位置的办法,使其变为规格化数的形式。

但在ieee754标准中,一个规格化的32位浮点数x的真值表示为:

x=(-1)ˇs×(1.m)×2ˇ(e-127) e=e-127 其中s是浮点数的符号位,占1位。m是尾数,放在低位部分,占用23位,小数点位置放在尾数域最左(最高)有效位的右边。e是阶码,占用8位。它的尾数域所表示的值是1.m。e为实际指数。因为规格化浮点数的尾数域最左位(最高有效位)总是1,故这一位经常不予存储,而认为隐藏在小数点的左边。

64位的浮点数中符号位1位,阶码域11位,尾数域52位,指数偏移值是1023.因此规格化的64位浮点数x的真值为

x=(-1)ˇs×(1.m)×2ˇ(e-1023) e=e-1023 将十进制数11.375表示为754标准存储格式(就是上文提到的一种规格化浮点数的国际标准)

11.375=+1011.011=+(1.011011)×2ˇ3=(-1)ˇs×(1.m)×2ˇe

可知s=0,包括隐藏位1的尾数1.m=1.011011=1.011 0110 0000 0000 0000 0000 e=3

e=e+127=130=011+01111111=10000010

则二进制数格式为

0 1000 0010 0110 1100 0000 0000 0000 0000

- ------------- ---------------------------

↑ ↑ ↑

s 阶码(8位) 尾数(23位) create table 浮点数(浮点数);

insert into 浮点数 values(1.00);

insert into 浮点数 values(1.10);

insert into 浮点数 values(1.021);

insert into 浮点数 values(1.01);

insert into 浮点数 values(100.2);

insert into 浮点数 values(0.586);

insert into 浮点数 values(299.999);

insert into 浮点数 values(53.000);

insert into 浮点数 values(35003.12);

.mode column

.h on

select * from 浮点数;

浮点数

----------

1.0

1.1

300

1.021

1.01

100.2

0.586

299.999

53.0

35003.12

--输入整数,保存整数,输入小数,如果小数点后边都是零,只保留一个零。

--四舍五入round(字段名,保留小数点位数)

select 浮点数, round(浮点数,2)四舍五入from 浮点数;

浮点数 四舍五入

---------- ------------

1.0 1.0

1.1 1.1

300 300.0

1.021 1.02

1.01 1.01

100.2 100.2

0.586 0.59

299.999 300.0

53.0 53.0

35003.12 35003.12

--四舍五入保留2位小数,整数后面加一个零.

select round(浮点数,2),length(round(浮点数,2))-length(cast(浮点数 as integer)) from 浮点数;

round(浮点数,2) length(round(浮点数,2))-length(cast(浮点数 as integer))

------------------ ------------------------------------------------------

1.0 2

1.1 2

300.0 2

1.02 3

1.01 3

100.2 2

0.59 3

300.0 2

53.0 2

35003.12 3

0.5 2

--四舍五入后的位数长度减去取整后的位数长度行规教徒等于2的需要加一个零.

sqlite> select 浮点数 as 'raw value', (round(浮点数,2)) as 'rnd value' , case when (length(round(浮点数,2))) - (length(cast(浮点数 as integer)) ) =2 then substr(' '||(round(浮点数,2))||'0', -10,10) else substr(' '||(round(浮点数,2 )),-10,10) end as 'result' from 浮点数;

raw value rnd value result

---------- ---------- ----------

1.0 1.0 1.00

1.1 1.1 1.10

300 300.0 300.00

1.021 1.02 1.02

1.01 1.01 1.01

100.2 100.2 100.20

0.586 0.59 0.59

299.999 300.0 300.00

53.0 53.0 53.00

35003.12 35003.12 35003.12

0.5 0.5 0.50

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。