微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > 请教一个浮点数转换成定点数的问题!

请教一个浮点数转换成定点数的问题!

时间:10-02 整理:3721RD 点击:
请教一个浮点数转换成定点数的问题:
输入是一个24位的ieee754标准的浮点数,格式是1_8_15,已经直接去掉了最后8位, 如何把它转换成格式为 1_22_8 的定点数? (定点数 整数22位,小数8位)

因为用的 design ware, 有个模块叫 "flt2i", 可以把浮点数换成整数, 但是小数部分怎么办呢? 不能用别的浮点运算器.
苦闷了好几天了,请教各位

求助~

根据IEEE 745: 如 11 = 8 + 2 + 1 = 1011b  = 1.011x2^3  
step 1:  1_00000101_1110_0000_0000_000
step 2:   1_10000010_0110_0000_0000_000    说明:此时将Exponent做127的offset,同时将整数位的1省略掉只剩下Fraction。
所以在做浮点数到定点数的变化时,首先将8it Exponent减掉offset(127),然后将 15bit Fraction 补足整数位1
然后根据定点数和浮点数的差值,对 Fraction 做位移运算。不足位补“0”。

搜罗


IEEE754标准在表示浮点数时,每个浮点数均由三部分组成:符号位S (sign),指数部分E (exponent) 和尾数部分M (mantissa)。
浮点数一般采用以下四种基本格式:
(1)单精度格式(32位):除去符号位1位后,E占8位,M占23位。
(2)扩展单精度格式:E>=11位,M>31位。
(3)双精度格式:(64位);E=11位,M=52位。
(4)扩展双精度格式:E>=15位,M>63位。
我 们最重要的是掌握单精度格式的表示法。在IEEE754标准中,约定小数点左边隐含有一位,通常这位数就是1,这样实际上使尾数的有效位数为24位,即尾 数为1.M。指数的值在这里称为阶码,为了表示指数的正负,所以阶码部分采用移码表示,移码值为127,阶码值即从1到254变为-126至+127,在 IEEE754中所有的数字位都得到了使用,明确地表示了无穷大和0,并且还引进了"非规格化数"                                     denormalized numbers (also called subnormal numbers)
,使得绝对值较小的数得到更准确表示。请看下表:
S(1位)     E(8位)         M(23位)     N(32位)  
符             0                 0            (-1)S·2E-127·(1.M) 为规格化数                                    
                0              不等于0      (-1)S·2-126·(0.M) 为非规格化数
号        1到254之间      不等于0     (-1)S·2E-127·(1.M) 为规格化数
               255             不等于0       NaN(非数值)
位            255                 0            无穷大  
其中红色字0、1表示隐含位,注意当数字N为非规格化数或是0时,隐含位是0。
以单精度为例子,我们知道指数有 8 位,可以表示 2^8=256 (0, 1, 2, ..., 255) 个数,但是最小的 e_min =-126, 最大e_max = 127, 只有 127+126+1=254 个数, 另外两个数用来干什么呢?
用来表示零和无穷大,请参考下面的表. 当 e = e_min -1 时,用来表示零,(零还有正负之分);
当 e=e_max +1 时, 用来表示正负无穷大。 为什么零不是真正的零呢?因为 IEEE 754 标准约定小数点左边隐含有一位,而且这隐含的一位的数值对于规格数而言是1,对于非规格数而言是0.




看起来双精度浮点数的范围很大,但是 171 的阶乘约是 1.24E10^309 已经比双精度能表示的最大的浮点数大。
The largest number that can be represented is approximately 2.0 · 2127 ≈ 3.4028 × 10^38 in single precision and 2.0 · 21023 ≈1.7977 × 10^308 in double precision. The smallest normalized number is 1.0 · 2−126 ≈1.1755 × 10^ −38 in single precision and 1.0 · 2^−1022 ≈ 2.2251 × 10^−308 in double
precision.
Unit roundoff error : 1 和某个数相加用浮点数表示还等于1, 则这个数称位 Unit roundoff error.
Unit roundoff error 是    2^−24 ≈ 5.96 · 10^−8 , in single precision;
   2^−53 ≈ 1.11 · 10^−16 in double precision.

搜罗
IEEE 754标准在表示浮点数时,每个浮点数均由三部分组成:符号位S,指数部分E和尾数部分M.S=0表示正数,S=1表示负数.
浮点数一般采用以下四种基本格式:
单精度格式(32位):除去符号为1位后,E占8位,M占23位.
扩展单精度格式:E>=11位,M=31位
双精度格式64位):E>=11位,M=52位.
扩展双精度格式:E>=15位,M>63位.
在IEEE 745标准中,约定小数点左边隐含有一位,通常这次数就是1,这样实际上使尾数的有效位数为24位,即尾数为1.M.指数的值在这里称为阶码,为了表示指数的正负,所以阶码部分采用移码表示,移码值为127(注意这是IEEE 754指定的单精度的偏移量,而不是指移码的偏移量为128),阶码值即从1到254变为-126至-126至127,在IEEE 754中所有的数字位都得到了使用.
(1)0.15625转换成二进制值为0.00101
在IEEE 754中规格化表示为1.01X2^(-3)(这里的-3表示小数点向右移动了3位),所以e=127+(-3)=124
IEEE 754编码为:0 01111100 01000000000000000000000
(2)-5转换成二进制值为-101
在IEEE 754中规格化表示为1.01X2^2,e=127+2=129
IEEE 754编码为: 1 10000001 0100000000000000000000
说明:这里的尾数是指0.1X2^M次方,即为所用格式的M的位数,eg:单精度格式中M占23位,得出结构中0.1X2^23次方化成二进制数为0100000000000000000000

看来还真不简单,谢谢楼上各位的资料!

很复杂呀,哎,

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top