c语言float四舍五入 float型保留几位小数和有效数字


c语言float四舍五入 float型保留几位小数和有效数字

文章插图
电子计算机只能存储0和1,人类世界所能认识的任何数据都需要通过转换为二进制再进行存储 。整数(int)型转换为二进制存储很好理解,那么float型数据计算机又是怎么存储的呢?常说的浮点型数据精度丢失和数据溢出又是怎么回事呢?
浮点数示意图
位和字节位:来自英文bit,音译为“比特”,表示二进制位 。位是计算机内部数据储存的最小单位,11010100是一个8位二进制数 。
字节:来自英文Byte,音译为“拜特”,习惯上用大写的“B”表示 。字节是计算机中数据处理的基本单位 。计算机中以字节为单位存储和解释信息,规定一个字节由八个二进制位构成,即1个字节等于8个比特(1Byte=8bit) 。八位二进制数最小为00000000,最大为11111111;通常1个字节可以存入一个ASCII码,2个字节可以存放一个汉字国标码 。
int型数据存储int型数据根据平台类型不同,所占用字节大小也不同,这里就按正常的4个字节来讲 。整型分有符号和无符号,有符号左边最高位为符号位 。
unsigned int和signed in按四个字节计算,也就是4*8=32位 。int默认是signed有符号位的 。所以,unsigned int表示的范围是:0~2的32次方-1 。signed int表示的范围是:-2的31次方~2的31次方-1 。
例如+3,转为二进制是0000 0011,但是计算机是按补码存储整型数据的,正数的补码就是其本身,但是负数的补码就不是了 。这里不作细讲,有兴趣的朋友可以翻看我前面的文章,里面有详细介绍 。
整形数据存储方式
float型数据存储浮点数转二进制方法十进制小数转换成二进制小数采用”乘2取整,按序取出”法 。
整数部分按整数方式转,用短除法,小数部分按如下方式,最后再用小数点合起来;
具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止 。然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位 。
例:0.734375转二进制,结果是0.101111 。
0.734375 x 2 = 1.46875
0.46875 x 2 = 0.9375
0.9375 x 2 = 1.875
0.875 x 2 = 1.75
0.75 x 2 = 1.5
0.5 x 2 = 1.0
IEEE二进制浮点数算术标准浮点数的存储方式与整型数据不同 。浮点数运算有自己的标准标准,也称IEEE二进制浮点数算术标准(IEEE 754),是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用 。
根据国际标准IEEE(电气和电子工程协会)规定,任何一个浮点数NUM的二进制数可以写为:NUM = (-1) ^ S * M * 2 ^ E;//(S表示符号,E表示阶乘,M表示有效数字)
这个标准是什么意思呢?其实说白了就是二进制的科学计数法:
十进制:12345678 = 1.2345678*10^7 ;
二进制:例如十进制11.0,写成二进制就是1011.0,用IEEE标准表示就是(-1)^0 × 1.011 × 2^3 ,s=0,M=1.011,E=3;
浮点数存储浮点数在内存中的存储按下图所示方式存储:
1、对于S,用来表示符号,0为正,1为负
2、对于M:规定M在存储时舍去第一个1,只存储小数点之后的数字 。这样做节省了空间,以float类型为例,就可以保存23位小数信息,加上舍去的1就可以用23位来表示24个有效的信息 。
3、对于E(指数)E是一个字节(8位)整数所以E的取值范围为(0~ 255),但是在计数中指数是可以为负的,所以规定在存入E时,在它原本的值上加上中间数(127),在使用时减去中间数(127),这样E的真正取值范围就成了(-127~128) 。


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: