浮点型数据


浮点型数据

文章插图
浮点型数据浮点型数据定义
浮点型数据分为 浮点型常量和浮点型变数
浮点型常量
【浮点型数据】实型也称为浮点型 。实型常量也称为实数或者浮点数 。在C语言中,实数只採用十进制 。它有二种形式: 十进制数形式指数形式 。
基本介绍中文名:浮点型数据
外文名:Floating Point Value
组成:浮点型常量和浮点型变数
相关语言:C语言
类型:电脑程式
数据介绍1.十进制数形式由数码0~ 9和小数点组成 。例如:0.0,.25,5.789,0.13,5.0,300.,-267.8230等均为合法的实数 。2.指数形式由十进制数,加阶码标誌“e”或“E”以及阶码(只能为整数,可以带符号)组成 。其一般形式为a E n (a为十进制数,n为十进制整数)其值为 a*10,n 如: 2.1E5 (等于2.1*10的5次方), 3.7E-2 (等于3.7*10的-2次方) 0.5E7 (等于0.5*10的7次方), -2.8E-2 (等于-2.8*10的-2次方),以下不是合法的实数 345 (无小数点) E7 (阶码标誌E之前无数字)-5 (无阶码标誌) 53.-E3 (负号位置不对) 2.7E (无阶码)标準C允许浮点数使用后缀 。后缀为“f”或“F”即表示该数为浮点数 。如356f 。例2.2说明了这种情况:void main(){printf("%f\n%f\n",356.,356f);}void 指明main不返回任何值 利用printf显示结果 结束浮点型变数:实型变数分为两类:单精度型和双精度型,其类型说明符为float 单精度说明符,double 双精度说明符 。在Turbo C中单精度型占4个位元组(32位)记忆体空间,其数值範围为3.4E-38~3.4E+38,只能提供七位有效数字 。双精度型占8 个位元组(64位)记忆体空间,其数值範围为1.7E-308~1.7E+308,可提供16位有效数字 。实型变数说明的格式和书写规则与整型相同 。例如: float x,y; (x,y为单精度实型量)double a,b,c; (a,b,c为双精度实型量)实型常数不分单、双精度,都按双精度double型处理 。相互转换标準4位元组浮点型在计算机里存储方式如下图
浮点型数据

文章插图
IEEE754标準中浮点数表示格式IEEE规定的浮点数表示法是一种科学计数法,用符号(正或负)、指数和尾数来表示,底数被确定为2 。也就是说浮点数被表示为尾数乘以2的指数次方再带上符号 。具体格式如下:符号域指数域小数域指数偏移量单精度浮点数1 位[31]8位[30-23]23位[22-00]127双精度浮点数1 位[63]11 位[62-52]52 位[51-00]1023下面以单精度浮点数为例来介绍浮点数的三个区域:符号域:符号域占1位,0表示正数,1表示负数 。指数域:指数域共有8位,可表达的範围为:0~255 。为能处理负指数,实际指数位存储在指数域中值减去一个偏移量(单精度为127,双精度为1023) 。单精度浮点数的偏移量为127,故实际可表达的指数值的範围为-127~128 。尾数域:尾数域共有23位 。由于规範浮点数的小数点左侧必须为1,所以在保存尾数时,可以省略小数点前面这个1,从而腾出一个二进制位来保存更多的尾数 。举例:比如对于单精度数而言,二进制的1001.101(对应于十进制的9.625)可以表达为1.001101 ×2^3,所以实际保存在尾数域中的值为0011 0100 0000 0000 0000 000,即去掉小数点左侧的1,并用0 在右侧补齐 。(整数部分(9)的计算:1001小数部分(0.625)的计算:0.625*2=1.25--------10.25 *2=0.5 ----------00.5 *2=1.0 -----------1所以用二进制科学表示方式为:1.001101*2^3)实数与浮点数之间的变换举例例一:已知一个单精度浮点数用16进制数表示为:0xC0B40000,求此浮点数所表达的实数 。先转换为二进制形式(注意:对于负数二进制补码转换成十进制一定要:先取反,后加1)C 0 B 4 0 0 0 01100 0000 1011 0100 0000 0000 0000 0000按照浮点数格式切割成相应的域 1 1000 0001 01101 000000000000000000经分析:符号域1 意味着负数;指数域为129 意味着实际的指数为2 (减去偏差值127);尾数域为01101 意味着实际的二进制尾数为1.01101 (加上隐含的小数点前面的1) 。所以,实际的实数为:= -1.01101 × 2^ 2=- ( 1*2^0 + 1*2^(-2) + 1*2^(-3) + 1*2^(-5) ) × 2^2= -(1+0.25+0.125+0.03125)*4= -1.40625*4= -5.625例二:将实数-9.625变换为相应的浮点数格式 。1) 求出该实数对应的二进制:1001.101,用科学技术法表达为:-1.001101 ×2^3;2) 因为负数,符号为1;3) 指数为3,故指数域的值为3 + 127 = 130,即二进制的10000010;4) 尾数为1.001101,省略小数点左边的1后为001101,右侧0补齐,补够23位,最终尾数域为:00110100000000000000000;5) 最终结果:1 10000010 00110100000000000000000,用16进制表示:0xC11A0000 。