鱼C论坛

 找回密码
 立即注册
查看: 1703|回复: 13

[已解决]double和float的区别到底是怎么样的

[复制链接]
发表于 2019-5-20 15:00:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
我在做第八课的第一个计算温度的题

有一次小甲鱼受邀到华盛顿参加演讲,一查天气预报有 45 度高温,于是穿着短袖沙滩裤就出发了……结果到了那里才发现冻成狗!后来才知道人家老外习惯使用的温度单位是华氏度(F),不是咱的摄氏度(C)……(以上内容纯属YY)=e$"_^~
问题:写一个华氏度到摄氏度的转换程序,用户输入华氏度,程序计算并输出对应的摄氏度。
1摄氏度 =(1华氏度 – 32)* 5 / 9

我用的数据类型是double  答案是用的float

搞不懂两者到底区别在哪。查了百度也有点蒙蔽,能不能通俗易懂的解答与喜爱
最佳答案
2019-5-20 15:02:49
现在没啥太大区别了   默认推荐double了
早先 电脑硬件比较紧张  单精度据说能节省一些内存,现在吗  谁还差那点内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-5-20 15:02:49 | 显示全部楼层    本楼为最佳答案   
现在没啥太大区别了   默认推荐double了
早先 电脑硬件比较紧张  单精度据说能节省一些内存,现在吗  谁还差那点内存
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 15:29:36 | 显示全部楼层
wp231957 发表于 2019-5-20 15:02
现在没啥太大区别了   默认推荐double了
早先 电脑硬件比较紧张  单精度据说能节省一些内存,现在吗  谁还 ...

我也是习惯用double  但是 做题去计算那个温度的时候  用float和double 的数据类型 编译出来的计算结果不同
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 15:33:26 | 显示全部楼层
本帖最后由 jackz007 于 2019-5-20 15:49 编辑
1、数字编码:
   float:总共 32 位,其中,1 个符号位, 8个指数位,23 个尾数位
  double:总共 64 位,其中,1 个符号位,11个指数位,52 个尾数位

2、表达范围:
 float:  -3.40E+38  ~  +3.40E+38
double: -1.79E+308 ~  +1.79E+308

3、数值精度:
    浮点数在内存中是按科学计数法来存储的,其精度取决于数字编码中的尾数长度,float 有 23 个尾数位,2 ^ 23 = 8388608,一共 7 位,可见,float 的数值精度是 6 位,double 有 52 个尾数位,2 ^ 52 = 4503599627370496,一共有 16 位,可见,double 的数值精度是 15 位。
        显然,double 的表达能力更加强大,但是,与 float 相比,使用 double 的劣势也很明显,一是占用内存资源多,而是运行效率低,所以,使用时,要合理权衡利弊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 15:33:49 | 显示全部楼层
1031967096 发表于 2019-5-20 15:29
我也是习惯用double  但是 做题去计算那个温度的时候  用float和double 的数据类型 编译出来的计算结果不 ...

不可能,那是你代码有问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 15:36:14 | 显示全部楼层
wp231957 发表于 2019-5-20 15:33
不可能,那是你代码有问题

#include<stdio.h>

int main()
{
        float a , b ;
        printf("请输入华氏度:");
        scanf("%f",&a);
       
        b = (a - 32) * 5 / 9;
        printf("转化为摄氏度是:%.2f\n",b);
       
        return 0;
       
}

结果
请输入华氏度:45
转化为摄氏度是:7.22

#include<stdio.h>

int main()
{
        double a , b ;
        printf("请输入华氏度:");
        scanf("%f",&a);
       
        b = (a - 32) * 5 / 9;
        printf("转化为摄氏度是:%.2f\n",b);
       
        return 0;
       
}

结果
请输入华氏度:45
转化为摄氏度是:-17.78



大佬请过目!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 15:37:46 | 显示全部楼层
scanf("%f",&a);
printf("转化为摄氏度是:%.2f\n",b);

第二段代码  把这两个%f  修改为%lf
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 15:40:50 | 显示全部楼层
wp231957 发表于 2019-5-20 15:37
scanf("%f",&a);
printf("转化为摄氏度是:%.2f\n",b);

哇,真滴强!谢大佬!学到了。意思是double对应的输出符是%lf  float对应的是%f吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 15:41:31 | 显示全部楼层
jackz007 发表于 2019-5-20 15:33
显然,double 的表达能力更加强大,但是,与 float 相比,使用 double 的劣势也很明显,一是占用内存 ...

感谢感谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 15:42:50 | 显示全部楼层
1031967096 发表于 2019-5-20 15:40
哇,真滴强!谢大佬!学到了。意思是double对应的输出符是%lf  float对应的是%f吗

是得
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-5-20 15:47:33 | 显示全部楼层

感谢大佬!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-5-20 16:25:52 | 显示全部楼层
本帖最后由 Croper 于 2019-5-20 16:28 编辑
wp231957 发表于 2019-5-20 15:37
scanf("%f",&a);
printf("转化为摄氏度是:%.2f\n",b);


嗯。。准确地说,printf是不该用"%lf"的,这个并不在标准之内,虽然现在很多编译器都支持。但理论上来说,这是错误的写法。
printf只有%f没有%lf。

至于其原因,是因为C语言里使用可变参数时,为了保证形参的长度统一,会自动发生类型的转换,也就是printf中的float和double都会被转换为double,同时使用“%f”作为标记符。也就是正确的答案应该是scanf中的“%f”改为“%lf"而printf中的不变。

https://blog.csdn.net/shenzhou111/article/details/7826444

评分

参与人数 1荣誉 +5 鱼币 +2 贡献 +2 收起 理由
无敌大帅哥 + 5 + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 2 反对 0

使用道具 举报

发表于 2019-5-20 16:31:07 | 显示全部楼层
Croper 发表于 2019-5-20 16:25
嗯。。准确地说,printf是不该用"%lf"的,这个并不在标准之内,虽然现在很多编译器都支持。但理论上来 ...

收到,学习了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-7-15 19:35:56 | 显示全部楼层
Croper 发表于 2019-5-20 16:25
嗯。。准确地说,printf是不该用"%lf"的,这个并不在标准之内,虽然现在很多编译器都支持。但理论上来 ...

大佬 谢谢大佬 膜拜 感激  谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 23:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表