您好、欢迎来到现金彩票网!
当前位置:手机棋牌游戏平台 > 位域 >

浮点数在计算机中的表示

发布时间:2019-08-09 21:19 来源:未知 编辑:admin

  十进制数2.0用Pentium的32位浮点格式表示,则符号位为0,偏移阶码为80H,尾数为000000H。为什么可以知道偏移阶码e共8位,是带有偏移量127的。关于尾数共24位,使用原码表示,其绝对值...

  十进制数2.0用Pentium的32位浮点格式表示,则符号位为0,偏移阶码为80H,尾数为000000H。为什么可以知道偏移阶码e共8位,是带有偏移量127的。关于尾数共24位,使用原码表示,其绝对值在1和2之间,其中1和小数点都是隐含的,不直接表示,即计算机中表示出来的仅23位应该怎么理解?

  先澄清一个概念,浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值,具用浮点数或定点数表示某哪一种数要看用户赋予了这个数的意义是什么。

  unsigned long double:高双精度无符号,80位(嚯,应该是C++中最长的内置类型了吧!)

  然而不同的编译器对它们的支持也略有不同,据我所知,很多编译器都没有按照IEEE规定的标准80位支持后两种浮点数的,大多数编译器将它们视为double,或许还有极个别的编译器将它们视为128位?!对于128位的long double我也仅是听说过,没有求证,哪位高人知道这一细节烦劳告知。

  下面我仅以float(带符号,单精度,32位)类型的浮点数说明C++中的浮点数是如何在内存中表示的。先讲一下基础知识,纯小数的二进制表示。(纯小数就是没有整数部分的小数,讲给小学没好好学的人)

  纯小数要想用二进制表示,必须先进行规格化,即化为 1.xxxxx * ( 2 ^ n ) 的形式(“^”代表乘方,2 ^ n表示2的n次方)。对于一个纯小数D,求n的公式如下:

  再用 D / ( 2 ^ n ) 就可以得到规格化后的小数了。接下来就是十进制到二进制的转化问题,为了更好的理解,先来看一下10进制的纯小数是怎么表示的,假设有纯小数D,它小数点后的每一位数字按顺序形成一个集合:

  现在问题就是怎样求得b1, b2, b3,……,bn。算法描述起来比较复杂,还是用数字来说线 ^ n )这个数比较特殊,我称之为位阶值。

  最后把计算得到的足够多的1和0按位顺序组合起来,就得到了一个比较精确的用二进制表示的纯小数了,同时精度问题也就由此产生,许多数都是无法在有限的n内完全精确的表示出来的,我们只能利用更大的n值来更精确的表示这个数,这就是为什么在许多领域,程序员都更喜欢用double而不是float。

  指数是以2为底的,范围是 -128 到 127,实际数据中的指数是原始指数加上127得到的,如果超过了127,则从-128开始计,其行为和X86架构的CPU处理加减法的溢出是一样的。比如:127 + 2 = -127;127 - 2 = 127

  尾数都省去了第1位的1,所以在还原时要先在第一位加上1。它可能包含整数和纯小数两部分,也可能只包含其中一部分,视数字大小而定。对于带有整数部分的浮点数,其整数的表示法有两种,当整数大于十进制的16777215时使用的是科学计数法,如果小于或等于则直接采用一般的二进制表示法。科学计数法和小数的表示法是一样的。

  小数部分则是直接使用科学计数法,但形式不是X * ( 10 ^ n ),而是X * ( 2 ^ n )。拆开来看。

http://lake-macquarie.com/weiyu/665.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有