精华内容
下载资源
问答
  • c语言浮点数的体会

    2018-05-07 17:47:46
    浮点数的类型分3类:1.float,单精度浮点数,占用4个字节,表示范围:3.4e-38~3.4e382.double,双精度浮点数,占用8个字节,表示范围:1.7e-308~1.7e308 3.long double,长双精度浮点数,占用10个字节,表示范围...

    浮点数的类型分3类:
    1.float,单精度浮点数,占用4个字节,表示范围:3.4e-38~3.4e38
    2.double,双精度浮点数,占用8个字节,表示范围:1.7e-308~1.7e308

     

    3.long double,长双精度浮点数,占用10个字节,表示范围:1.2e-4932~1.2e4932

     

    这么官方的语言似乎难懂,那么实用一点来说呢

    通常我们打印数据用的%d是代表的十进制整数

    %f也比较常见说的就是浮点数,默认保留6位小数

    %lf也是浮点数一般用于double类型,默认保留15位有效数字

    当然有没有自己定义的精确度呢

    答案是一定有的

    EPS=0.01,0.02等等,表示误差的精确度

    用定义EPS的方法可以直接的得到自己想要的精确度也是比较方便的选择

    本人初学者,以此作为一个阶段性学习记录,仅供参考。

    展开全文
  • c语言浮点数的比特表示方式

    千次阅读 2019-05-30 21:27:16
    c语言单精度浮点数float类型大小为4字节,共32位。 其中最高1位为符号位,符号位后的8位为指数区,剩下23位为数据区。 浮点型表示方式大概为M*pow(2,E) 其中M为精度数,E为2的指数 符号位顾名思义,1表示负数,0...

    (注意:pow(2,E)表示2的E次方)

    c语言单精度浮点数float类型大小为4字节,共32位。

    其中最高1位为符号位,符号位后的8位为指数区,剩下23位为数据区。

    浮点型表示方式大概为M*pow(2,E)

    其中M为精度数,E为2的指数

    符号位顾名思义,1表示负数,0代表正数

    下面不考虑符号位

    1.当指数区全为0时,E=pow(2,8-1)+2=-126,M=数据区表示的大小/pow(2,23),所以数值为M*pow(2,-126)

    如0 00000000 11111111111111111111111为((pow(2,23)-1)/pow(2,23))*pow(2,-126)

    2.指数区不全为0时,E=pow(2,(8-1)+1+指数区值),如01111111为1

    注意M=1+(数据区表示的大小/pow(2,23)),数值为M*pow(2,E)=M*pow(2,pow(2,(8-1)+1+指数区值))

    如1 01111111 00000000000000000000000为1*pow(2,0)=1.0

     

    个人浅薄之见,如有不妥,还请纠正。

    展开全文
  • float类型的数据在内存中是如上存储的,float类型的存储方式如下(摘自博客http://blog.csdn.net/yezhubenyue/article/details/7436624): ... 一个浮点数由2部分组成:底数M和指数E。  底数...

    float类型的数据在内存中是如上存储的,float类型的存储方式如下(摘自博客 http://blog.csdn.net/yezhubenyue/article/details/7436624):

    取原文中的部分总结如下:

      

    浮点型变量在计算机内存中占用4字节(Byte),即32-bit。遵循IEEE-754格式标准。

      一个浮点数由2部分组成:底数M和指数E。  

      底数部分 使用2进制数来表示此浮点数的实际值。

      指数部分 占用8-bit的二进制数,可表示数值范围为0-255。但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128. 底数部

    分实际是占用24-bit的一个值,由于其最高位始终为 1 ,所以最高位省去不存储,在存储中只有23-bit。 到目前为止,底数部分23位加上指数部分8位使用了31位。那么前面说过,float是占用

    4个字节即32-bit,那么还有一位是干嘛用的呢? 还有一位,其实就是4字节中的最高位,用来指示浮点数的正负,当最高位是1时,为负数,最高位是0时,为正数。

      

    举例将17.625换算成 float型。

      1、将17.625换算成二进制位:10001.101  ( 0.625 = 0.5+0.125, 0.5即 1/2, 0.125即 1/8 如果不会将小数部分转换成二进制,请参考其他书籍。

      2、再将 10001.101 向右移,直到小数点前只剩一位 成了 1.0001101 x 2的4次方(因为右移了4位)。

      此时我们的底数M和指数E就出来了:底数部分M,因为小数点前必为1,所以IEEE规定只记录小数点后的就好,所以此处底数为 0001101 。

      指数部分E,实际为4,但须加上127,故为131,即二进制数 10000011 符号部分S,由于是正数,所以S为0.

      综上所述,17.625的 float 存储格式就是:01000001100011010000000000000000  //这就是我们下文中程序运行的结果


    1 #include<stdio.h> 2 3 void printBin(int n) //取整数,求整数部分的二进制数 4 { 5 if(n==0) 6 return; 7 printBin(n/2); 8 printf("%d",n%2); 9 } 10 11 void printFin(float f)//求小数部分的二进制数 12 { 13 int i=0; 14 float a; 15 a=f-(int)f; 16 if(a==0) 17 { 18 printf("0"); 19 return; 20 } 21 while(a!=1) 22 { 23 i++; 24 a=a-(int)a; 25 a=a*2; 26 printf("%d",(int)a); 27 if(i>28)//为什么有这个设置呢?因为float最大存储28位二进制小数值,实际上由于有进位,所以小数点后的数值长度会小于28 28 return; 29 } 30 return; 31 } 32 33 void Binary(float f) 34 { 35 float a; 36 a=f; 37 printBin((int)a); 38 printf("."); //两个二进制数之间用.进行连接 39 printFin(a); 40 putchar('\n'); 41 return; 42 } 43 44 45 int main(void) 46 { 47 int i; 48 union 49 { 50 float f; 51 int b; 52 }none; 53 54 float a; 55 int len=sizeof(int)*8; 56 printf("Please input F:"); 57 scanf("%f",&none.f); 58 Binary(none.f); 59 printf("%d\n",none.b); 60 for(i=0;i<len;i++) 61 { 62 printf("%4d",i); 63 } 64 putchar('\n'); 65 66 for(i=0;i<len;i++) 67 { 68 printf("%4c",('0'+((unsigned)(none.b&(1<<(none.b-1)))>>len-1)));//这个程序是移位将数据的存储二进制形式打印出来 69 none.b<<=1; 70 } 71 putchar('\n'); 72 73 return 0; 74 }

    程序运行结果如下:

    1 Please input F:17.625
    2 10001.101    //17.625的二进制形式
    3 1099759616   //17.625的内存中的二进制存储形式所对应的整形值
    4    0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19  20  21  22  23  24  25  26  27  28  29  30  31 //内存中的位数
    5    0   1   0   0   0   0   0   1   1   0   0   0   1   1   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0

     

    转载于:https://www.cnblogs.com/wireless-dragon/p/5170532.html

    展开全文
  • 1.浮点数包括:float,double,long double2.浮点数存储公式:&gt;(-1)^S*M*2^E &gt;(-1)^S表示符号位,当S=0时,这个浮点数为正数,当 S=1时,浮点数为负数 ...按照浮点数的格式,可以求出S=0,M=1.01,E=...

    1.浮点数包括:float,double,long double

    2.浮点数存储公式:

    >(-1)^S*M*2^E
    
    >(-1)^S表示符号位,当S=0时,这个浮点数为正数,当 S=1时,浮点数为负数
    
    >M表示有效数字,大于等于1,小于2
    
    >2^E表示指数位

    例:

    十进制5.0,写成二进制是101.0,相当于1.01*2^2
    按照浮点数的格式,可以求出S=0,M=1.01,E=2
    十进制-5.0,写成二进制是-101.0,相当于1.01*2^2
    按照浮点数的格式,可以求出S=1,M=1.01,E=2

    3.存储规定:

    >对于32位的浮点数,最高的1位是符号位S,接着的8位是指数E,剩下的23位是有效数字M


    >对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位是有效数字M


    >对有效数字M的规定

    1<=M>2,也就是说M可以写成1.xxxxxxxxx的形式,其中xxxxxxxxx表示小数部分,IEEE规定,在计算机保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxxxxx部分,比如1.01保存的时候只保存01,等取值的时候把第一位的1加上去。这样做的目的是省一位有效数字。以32位浮点数为例,留给M的只有23位,将第一位加上去后,等于可以保留24位有效数字。

    >对于指数E的规定:

    E是一个无符号整数,如果E为8位它的取值范围为0~255;如果E为11位,取值范围为:0~2047;在科学计数法中E可以出现负数,所以IEEE 754规定,存入内存时E的真实值必须加上一个中间数,对于8位中间数位127;对于11位中间数位1023.


    2^10的E是10,所以保存32位浮点数时,必须保存成10+127=137,即10001001

    E分3中情况:

    (1).E不全为0或者不全为1

           这时浮点数就采用下面的规则表示,即指数E的计算值减去127(或者1023),得到真实值,在将有效数字M前面加第一位的1。

    比如:

    0.5的二进制形式为0.1,由于规定正数部分必须为1,即小数点右移1位,
    则为:1.0*2^(-1),其阶码表示为:-1+127=126,表示为:01111110,
    而尾数1.0去掉整数部分为0,补齐0到23位:0000 0000 0000 0000 0000 000,
    则二进制表示为:0 0111 1110 0000 0000 0000 0000 0000 000

    (2).E全为0:

          这时浮点数的指数E等于1-127(或者1-1023)即为真实值,有效数字M不在加上第一位的1,而是还原为0.xxxxxxx的小数。这样做是为了表示()0,以及接近0的很小数字。

    (3).E全为1:

          这时如果有效数字M全为0,表示正(负)无穷大(正负取决于符号位S)

    4.例题:

    int main(){
    	int n=9;
    	float *p=(float*)&n;
    	printf("n的值为:%d\n",n);
    	printf("*p的值为:%f\n",*p);
    	*p=9;
    	printf("n的值为:%d\n",n);
    	printf("*p的值为:%f\n",*p);
    	return 0;
    } 
    

    运行结果:

    为什么会出现这样的结果?

    详细解读:

    >为什么第一个*p打印结果为0?

       因为n为整数。*p为浮点数,将n转换成浮点数储存要按照浮点数储存的规则来:首先,写出9的二进制:0000 0000 0000 0000 0000 0000 0000 1001。将Ox00000009拆分,得到的第一位符号位S=0,后面8位的指数E=00000000,最后的23位有效数字M=000 0000 0000 0000 0000 1001。由于指数全为0,所以指数位E=1-127.所以浮点数可以写成:(-1)^0*0.000000000000000000001001*2^(-126)=1.001*2^(-146),显然是一个接近于0的正数,所以用十进制小数表示就是0.000000.

    >为什么第二个n的打印结果为:1091567616?

      首先,浮点数9.0用二进制表示为:1001.0,即1.001*2^3。那么第一位符号位S=0,有效数字M=001后面加20个0凑够23位,指数E=3+127=130,即:10000010。所以写成二进制形式应该是S+E+M,即:0 10000010 001 0000 0000 0000 0000 0000,这个二进制还原成十进制为:1091567616.

    展开全文
  • C语言浮点数有 float 和 double 。 浮点数在内存中的组成存放形式为 : 符号 s + 阶码 E +尾数 M 。其中 s 确定正负,E确定每一位的权重,M为未加权重的各位编码。 float 中 s 一位, E 的位数 k =8 , M 的位数 f...
  • IEEE 754标准 浮点格式可分为符号位s,指数位e以及尾数位f三部分。...在IEEE-754 标准下,浮点数一共分为: NaN:即Not a Number。非数的指数位全部为1 同时尾数位不全为0。在此前提下,根据尾数位首位是否为1,...
  • c语言浮点数的表示

    千次阅读 2011-10-20 17:07:57
    IEEE 754标准中,浮点数的表示方法如下: V=(-1)s×M×2E 其中: 1、s是符号位,占1个字符。s为1表示负数,s为0表示正数; 2、M是二进制小数,32位单精度float中M占23位,形式如同fn-1fn-2。。。f1f0(n=23); 3...
  • 浮点数上溢、下溢 什么是上溢? 数据大于当前定义类型的范围,导致出现异常数据的现象。 (当计算导致数字过大,超过当前类型能表达的范围时,就会发生上溢。) 例子1 在我电脑中float类型的长度是4个字节,数值...
  • 单精度浮点数: 1位符号位 8位阶码位 23位尾数 双精度浮点数: 1位符号位 8位阶码位 52位尾数   实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。...浮点表示的一般形式为:R=M*2^e (R:Rea
  • V=(-1)^S*M*2^E (1)(-1)^S表示符号位,当S = 0,V为正;当S = 1,V为负; (2)M为有效数字,因为M是二进制,大于等于1,小于2。 (3)2^E表示指数位
  • 以十进制为例,把一个4位有效数字的数(如,0.1234E-10)除以10,得到的结果是0.123E-10.虽然得到了结果,但是在计算过程中却损失了原本尾有效位上的数字 对于其中的尾数部位的位向右移不是很理解,上文说空出一...
  • c语言中的浮点数

    2015-04-10 10:01:00
    一、浮点数常量(小数) 0.11L, 0.0f ,0.0,1.88,2.5f ,0.188E1 E3表示103 比如 1.88E 3=1.88*1000=1880.0f E-3表示10-3 比如 1.88E-3=1.88/1000=0.00188f 二、浮点数变量 关键字 字节数 ...
  • 单精度浮点数: 1位符号位 8位阶码位 23位尾数 双精度浮点数: 1位符号位 8位阶码位 52位尾数 实数在内存中以规范化的浮点数存放,包括数符、阶码、尾数。...浮点表示的一般形式为:R=M*2^e (R:Rea...
  • 同学们,下面这段C程序有问题吗?一起来做做看! int main() { double val = 1e1.1; return 0; } 【答案解析】 这道题考查的是C语言基本知识,使用E来表示小数时,E后面得是一个整数!
  • 同学们,下面这段C程序有问题吗?一起来做做看! #include<stdio.h> int main() ... double val = e1;...欢迎关注我,每天为你答疑解惑C语言! 【答案解析】 在e之前必须得有一个整数才行! ...
  • 实型数据也称为浮点数或实数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。 实数的表示 1) 十进制数形式 由数码0~ 9和小数点组成。 例如:0.0、25.0、5.789、0.13、5.0、300.、-267...
  • 单精度浮点数在机内占4个字节 双精度浮点数在机内占8个字节 (2)有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 (3)所能表示数的范围不同 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38 双...
  • 1、浮点数 float与double都只能接近零,但无法表示0,有+inf,-inf表示无穷大和无穷小 float有效数字是7位,scanf读取用%f,printf打印可以用%f或%e double有效数字是15位,scanf读取用%lf,printf用%f,%e 计算机表达的...
  • 在C中来判断输入的是浮点数是整数的...然后检索字符串中是否有"."来判断#include #define FIRST_DEMO //计算浮点数的位数//#define SECOND_DEMO//#define THIRD_DEMO //把输入作为字符串读入int main(void){#ifde...
  • 浮点数的计算机表示符合IEEE 754标准,但是要注意,E在表示时存在偏置量。浮点数表示机制考虑较全面,分为三种浮点数:规格化浮点数、非规格化浮点数、一些特殊值。
  • C语言实型数据的存在形式以及合法性(浮点数): 参考文章: C语言中文网 实型数据也称为浮点数或实数。在C语言中,实数只采用十进制。它有二种形式:十进制小数形式和指数形式。 实数的表示: 十进制数形式 由数码0...
  • 这部分学习的是数据类型的浮点数与字符这两个类型,主要关于它们的类型介绍、输入输出等的问题,另外还学习了类型转换的方法。 1. 浮点类型 float 32字长 有效数字:7 ...%f,%e\n&quot;,a,a); ...
  • IEEE 754-标准二进制算术浮点数 (1) 单精度(32位)浮点数的结构: 名称 长度 比特位置 符号位 Sign (S) : 1bit (b31) 指数部分Exponent (E) : 8bit (b30-b23) 尾数部分Mantissa (M) : 23bit (b22-b0) ...
  • 在VB中如何发送一个浮点数,例如 -7.738263E-09 如何通过串口(mscomm控件发送,在另一端使用单片机接收。我知道在VC中只要使用 union {  char temp[4];  float num; }at; at.num = -7.738263E-09; 利用  ...
  • 指数部分,从e开始,也是可选的,e后面跟上可选的+/-,后跟1到多个0~9的任意数字。 请根据以上描述设计识别无符号浮点数的有穷自动机,根据识别结果输出“Yes”或“no”,并可以给出出错的位置。 2. 状态转换图 3....
  • C语言函数E字母

    千次阅读 2005-10-01 08:08:00
    函数名: ecvt 功 能: 把一个浮点数转换为字符串 用 法: char ecvt(double value, int ndigit, int *decpt, int *sign); 程序例: #include #include #include int main(void) { char *string; double value; int dec,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 389
精华内容 155
关键字:

c语言浮点数e

c语言 订阅