浮点由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。
浮点数a由两个数m和e来表示:a = m × b^e(b的e次方)。
在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。
有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。
我们可以用这3种方法来表示浮点数:
1、BCD 代码。
2、 阶码尾数表示法。
3、 我们可以把第二种方法改造一下,就能得到一种更好的方法。先把一个浮点数的小数点移到最后,用N=M×RC 表示,R=10,然后再把M 转换为二进制B,再用C 做阶码,B 做尾数用阶码尾数法表示。
例如: 3.14159=314159×10^(-5)。
314159 用二进制表示为1001100101100101111。
用这种方法不仅可以精确表示浮点数的值,还可以充分的利用存储空间。
扩展资料:
浮点运算单元(FPU)
浮点数运算和整数运算不同,所以运算单元当然不同。早期的浮点处理器是作为 CPU 的「外置协处理器」出现的。x87 FPU 特指与 x86 处理器配套的浮点协处理器架构。
有以下要点:
1、浮点寄存器采用栈结构。
深度为 8,宽度为 80 位,即 8 个 80 位的寄存器。
名称为 ST(0) ~ ST(7),栈顶为 ST(0),编号分别为 0 ~ 7。
2、所有浮点运算都按 80 位拓展精度进行。
3、浮点数在浮点寄存器和内存之间传送。
(1)float、double、long double 型的变量在内存中分别用 IEEE 754 单精度、双精度、扩展精度表示,分别占 32 位,64 位,96 位(前 16 位无效)。
(2)float、double、long double 类型变量在浮点寄存器中都用 80 位拓展精度表示。
(3)从浮点寄存器到内存:80 位拓展精度格式转换为 32 位或者 64 位。
(4)从内存到浮点寄存器:32 位或者 64 位转换为 80 位扩展精度格式。
参考资料来源:百度百科-浮点
百度百科-浮点表示法
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)。
例如,一个指数范围为±4的4位十进制浮点数可以用来表示43210,4.321或0.0004321,但是没有足够的精度来表示432.123和43212.3(必须近似为432.1和43210)。当然,实际使用的位数通常远大于4。
众所周知,计算机中的所有数据都是以二进制表示的,浮点数也不例外。然而浮点数的二进制表示法却不像定点数那么简单了。
扩展资料:
浮点计算是指浮点数参与的运算,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。
当浮点数的尾数为0或阶码为最小值时,计算机通常把该数当作零,因此程序中进行浮点运算时,判断某数是否为零,通常可以用小于某个极小值来代替。
浮点数并不一定等于小数,定点数也并不一定就是整数。所谓浮点数就是小数点在逻辑上是不固定的,而定点数只能表示小数点固定的数值,具用浮点数或定点数表示某哪一种数要看用户赋予了这个数的意义是什么。
参考资料来源:百度百科-浮点数
float f = 3.14; //定义一个浮点型变量,变量名为f,变量值为3.14
自己上网搜索 IEEE 754,有看不懂的来这里继续追问。
浮点数是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学记数法。
一个浮点数a由两个数m和e来表示:a = m × b^e。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b-1)。如果m的第一位是非0整数,m称作规格化的。有一些描述使用一个单独的符号位(s 代表+或者-)来表示正负,这样m必须是正的。e是指数。
这种设计可以在某个固定长度的存储空间内表示定点数无法表示的更大范围的数。
以IEEE754单精度浮点数为例子单精度:共32位,其中符号位占1位,指数占8位,尾数占23位。 例如IEEE754的浮点数5被表示为 0x40a00000二进制形式为( 0100 0000 1010 0000 ... 0000 0000)。可以看到第一位为0,表示它是一个正数。第2至9位为10000001,可以看出|E|=129>0, 则e=129-bias=129-127=2;再后面为M, 且|E|>0,说明是规格化数,则m=|1.M|=|1.01000..000|=1.25由n的计算公式可以求得 n=(-1)^0 * 1.25 * 2^2 = 5。