博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转】浮点格式IEEE754详解
阅读量:6124 次
发布时间:2019-06-21

本文共 4025 字,大约阅读时间需要 13 分钟。

原文网址:http://www.cnblogs.com/zjujunge/archive/2012/09/13/2682613.html

Intel聘请了最好的数值分析家来为8087FPU设计浮点数格式,他们设计的KCS浮点数标准的工作是如此出色,因此IEEE将这种格式作为IEEE浮点数格式的基础。

  为了满足广泛的性能与精度需求,intel实际实现三种浮点格式:单精度、双精度以及扩展精度,本文以前两种讲解。

  1. 单精度浮点格式

  单精度使用24位的尾数与8位的阶码,尾数通常表示的值在(1.0,2.0),尾数的最高为总是假定为1,正好是在二进制二进制小数点左边的第一个位,余下的23个尾数位则在小数点右边,代表该数。具体见下图M为尾数位。

   隐含位的存在导致尾数总是大于或等于1,小数点右边的每个位代表一个值(0或1)乘以2一个负幂。尽管从1到2有无限个数,我们能够表示的只有八百万个(223)。

  尾数使用1补码格式二不是2的补码。第31位(S)符号决定正负。

  阶码使用余-127格式简化了浮点数的比较。

  2.双精度浮点

  参照单精度浮点解析以及上图即可明白。

  3.浮点转成二进制显示部分源代码(C#)

  单精度浮点数显示

  

private void fp_Disp(double number)        {            double zhenshu, xiaoshu, jieguo;            string strZ, strX = "", strJ = "";            Int64 numb = 127;            int i = 1, len, le, len2, len3, Bias = 127;            string s = "", str1, str2, Jiema = "", weishu = "", jia;//,ti_Jiema="";            if (number > 0)            {                s = "0";            }            else            {                s = "1";            }            zhenshu = Math.Floor(Math.Abs(number)); //整数部分            numb = Convert.ToInt64(zhenshu);            strZ = Convert.ToString(numb, 2);            xiaoshu = Math.Abs(number) - zhenshu;            for (i = 0; ((xiaoshu != 0) && (i < 23)); i++)            {                jieguo = xiaoshu * 2;                strJ = jieguo.ToString();                strX += strJ.Substring(0, 1);                zhenshu = Math.Floor(jieguo);                xiaoshu = jieguo - zhenshu;            }            strJ = strZ + "." + strX;            str1 = strJ.Substring(0, 1);            if (str1.Equals("1"))            {                len = strZ.Length;                le = len + Bias - 1;                Jiema = Convert.ToString(le, 2);                len2 = Jiema.Length;                if (len2 < 8)                {                    for (i = 0, jia = ""; i < 8 - len2; i++)                    {                        jia += "0";                    }                    Jiema = jia + Jiema;                }                str2 = strZ.Substring(1, len - 1) + strX;                len = str2.Length;                if (len > 23)                {                    weishu = str2.Substring(0, 23);                }                else                {                    weishu = str2;                }            }            else            {                len = strX.IndexOf("1");                le = Bias - (len + 1);                Jiema = Convert.ToString(le, 2);                len2 = Jiema.Length;                if (len2 < 8)                {                    for (i = 0, jia = ""; i < 8 - len2; i++)                    {                        jia += "0";                    }                    Jiema = jia + Jiema;                }                len3 = strX.Length;                if (len3 == (len + 1))                {                    weishu = "0";                }                else                {                    weishu = strX.Substring(len + 1);                }            }            strJ = s + Jiema + weishu;            len = strJ.Length;            if (len < 32)            {                for (i = 0; i < 32 - len; i++)                {                    strJ += "0";                }            }            fp_sBox.Text = s;            fp_eBox.Text = Jiema;            len = 23 - weishu.Length;            for (i = 0; i < len; i++)                weishu += "0";            fp_mBox.Text = weishu;            byte fe;            fe = Convert.ToByte(Jiema, 2);            fp_eBox1.Text = fe.ToString();            fp_eBox2.Text = (fe - Bias).ToString();            //ti处理            ti_sBox.Text = s;            ti_eBox2.Text = (fe - Bias).ToString();            ti_eBox1.Text = (fe + 1).ToString();            Jiema = Convert.ToString(fe + 1, 2);            len=Jiema.Length;            for (i = 0; i < 8 - len; i++)            {                Jiema = "0" + Jiema;            }            ti_eBox.Text = Jiema;            ti_mBox.Text = weishu;            dti_eBox.Text = Jiema;        }

  4.TI处理器的浮点表示法

  具体见下图

你可能感兴趣的文章
linux:yum和apt-get的区别
查看>>
Sentinel 1.5.0 正式发布,引入 Reactive 支持
查看>>
如何对网站进行归档
查看>>
数据库之MySQL
查看>>
2019/1/15 批量删除数据库相关数据
查看>>
数据类型的一些方法
查看>>
Mindjet MindManager 2019使用教程:
查看>>
游戏设计的基本构成要素有哪些?
查看>>
详解 CSS 绝对定位
查看>>
AOP
查看>>
我的友情链接
查看>>
NGUI Label Color Code
查看>>
.NET Core微服务之基于Polly+AspectCore实现熔断与降级机制
查看>>
vue组件开发练习--焦点图切换
查看>>
浅谈OSI七层模型
查看>>
Webpack 2 中一些常见的优化措施
查看>>
移动端响应式
查看>>
python实现牛顿法求解求解最小值(包括拟牛顿法)【最优化课程笔记】
查看>>
js中var、let、const的区别
查看>>
腾讯云加入LoRa联盟成为发起成员,加速推动物联网到智联网的进化
查看>>