633-C语言的float和double的内存存储

float和double

存储的是近似值,因为有精度这一说。
在这里插入图片描述
在这里插入图片描述
在32位编译器或者64位编译器,都是4,8

在这里插入图片描述
在这里插入图片描述

float和double的内存存储

浮点数怎么存?
1、把小数点左边的整数部分和小数点右边的小数部分分别转成二进制
方法1:

在这里插入图片描述
在这里插入图片描述
方法2:
在这里插入图片描述
在这里插入图片描述
比较浮点数的大小,这样写是错误的:
在这里插入图片描述
因为浮点数存储的是近似值,所以这样比较不准确!!!

举个例子:10.65
在这里插入图片描述
尽头是:乘完只剩下整数部分了。但是上面这样就无限循环起来了!!!
在这里插入图片描述
但是float和double定义的类型的大小是有限的,不可能去存储这种没完没了的内容,所以只能存储0.65的近似值。
所以在浮点数比较的时候,要加上精度的控制!!!

2、在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
小数点左边的那个1不用存储,因为大家都一样啊。
在这里插入图片描述
指数:因为要表示正数的指数和负数的指数
所以我们要加上127,正数就是比127大,负数就是比127小
127的二进制是0111 1111
如果指数是3,就是给0111 1111加3次1
底数:我们算出来的二进制是什么就存什么进去,然后后面补上0,凑够23位:
在这里插入图片描述
因为10.65,小数部分0.65变成二进制是无穷无尽的,所以我们只能存近似值。
在这里插入图片描述
我们打开调试来看看:
在这里插入图片描述
我们在内存上看看:
在这里插入图片描述
左边这一列,显示的是内存的地址,从上到下,地址是从低到高
同一行:16进制下,2个数字表示1个字节。
同一行的地址,从左向右是低到高
在这里插入图片描述
在这里插入图片描述
我们的系统都是小端模式
在这里插入图片描述
所以我们在写的时候,肯定是右边是低字节,左边是高字节,所以小端模式下,我们把低地址的数据写在右边。(低地址,低字节)
在这里插入图片描述
我们把16进制转成2进制表示如下:
在这里插入图片描述
我们把结果和前面分析的比对看看,是不是一样的:
在这里插入图片描述

分析10.65

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
转成2进制
在这里插入图片描述
在这里插入图片描述
double精度更高
在这里插入图片描述

浮点数的精度问题和常见错误

在这里插入图片描述
底数存储的是在内存中最大的有效位数(float:2^23, double:2^52)。
在这里插入图片描述
float最大支持的有效数字位数是7位。double是16位。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
感觉好像是一样,我们控制一下输出的位数:
在这里插入图片描述
这就区分开了,有效数字的位数是不一样的!
在这里插入图片描述

在这里插入图片描述
进不去if语句,因为C/C++编译器做运算的时候,要保证类型是一致的。
在比较运算的时候,关系运算符的左边是float类型,右边是double类型,所以左边的float肯定要转成double类型,float只能表示7位有效位,硬转成16位的话,后边的数字就不可控了!!!
到底如何比较呢?
下一篇博客叙述!

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: C语言中,floatdouble是两种不同的数据类型,用于存储单精度和双精度浮点数。 float类型变量占用4个字节(32位)内存空间,精度约为7位小数。 double类型变量占用8个字节(64位)内存空间,精度约为15位小数。 定义方法: float num1; double num2; 赋方法: num1 = 1.23f; num2 = 3.14159; 使用方法: printf("num1=%f,num2=%lf",num1,num2); 由于double类型精度高,所以在科学计算或金融计算中,一般使用double类型。如果空间允许,更建议使用double类型。 ### 回答2: C语言中的浮点类型有两种:floatdoublefloat类型可以表示小数点后7位有效数字,double类型可以表示小数点后15-16位有效数字。 在实际应用中,float类型常用于存储占用空间较小的小数,比如表示温度、压力、声音等物理量;double类型则常用于需要更高精度的计算,比如计算科学或金融领域。 C语言中使用浮点数的方法和整型变量十分相似,可以进行加、减、乘、除等基本运算,也可以使用赋、条件语句、循环等常见操作。需要注意的是,在浮点数的计算中可能会出现超出范围的情况,比如除以0或者计算结果过大过小。这时候应该使用判断语句,或者特定的库函数(比如math.h中的函数)进行异常处理,避免计算错误。 在编写程序时,应该根据实际情况选择适合的浮点类型,并严格遵循“尽量使用小的占用空间”的原则,避免浪费内存资源。同时也应该注意浮点数的精度问题,避免舍入误差对计算结果造成影响。 总之,C语言中的floatdouble类型,是处理小数运算时十分重要的数据类型。合理、准确地使用这些类型,可以使程序运行效率更高,计算结果更精确。 ### 回答3: C语言中的floatdouble浮点数据类型float数据类型占据4个字节(32位),而double数据类型占据8个字节(64位)。 在C语言中,floatdouble主要用于存储小数或者浮点数。float数据类型可以存储的范围是1.2E-38~3.4E38,而double数据类型可以存储的范围是2.3E-308~1.7E308。因此,double数据类型存储范围比float更广泛。 使用floatdouble可以提高程序的精度和准确度。当程序需要不断进行小数计算时,floatdouble可以提供更加准确的计算结果。此外,在进行科学计算、金融计算、图形图像处理等领域的计算时,floatdouble也经常被使用。 在C语言中,使用floatdouble定义变量时需要在数字后面加上f或d,以表明该数字是floatdouble类型。例如:float num1 = 1.23f; double num2 = 2.4567d; 同时,C语言提供多个数学库函数,可用于计算浮点数中的数学函数,例如sqrt(开平方)、sin(正弦函数)等等,这些函数使用时要传入float或者double数据类型的参数。 总之,floatdouble类型数据C语言中广泛应用于数计算和科学计算等领域,提供了更加精确的计算结果。需要注意的是,在运算时应注意精度损失问题,避免误差的产生。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

林林林ZEYU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值