谁能详细讲解一下float与double都分别怎么使用?

jun362415472 2010-05-23 10:05:18
float与double它们本质的区别在是它们所占的内存大小与其精度。
但在好多场合使用float 不行,使用double却可以,就连就简单的
float i=6.0;也会出现warnning
...全文
5483 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jun362415472 2010-05-25
  • 打赏
  • 举报
回复
thank you
shangqiuzuidong 2010-05-23
  • 打赏
  • 举报
回复
double精度比float高!所以好多场合使用float不行,因为精度不够...
但高精度的代价是占用更多的内存...

C标准规定浮点常量默认是double,要符合标准用后缀f或F
C/C++ codefloat f = 6.0f;


上楼的已经说得很清楚
fthislife 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lbh2001 的回复:]
C标准规定浮点常量默认是double,要符合标准用后缀f或F

C/C++ code
float f = 6.0f;
[/Quote]

已经说清楚了。
float i=6.0;这样有warning的原因,安C标准 6.0 是double类型(默认的),把一个double隐式转float造成精度的损失,当然有warning了。而float f = 6.0f;这样 6.0f 是float 所以没问题
ameyume 2010-05-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lbh2001 的回复:]
C标准规定浮点常量默认是double,要符合标准用后缀f或F

C/C++ code
float f = 6.0f;
[/Quote]
up
还有就是楼上各位说的精度差别了。
hnzzgmc 2010-05-23
  • 打赏
  • 举报
回复
f,F
jianglutian 2010-05-23
  • 打赏
  • 举报
回复
有些编译器对double还有特殊优化。
一般来说float和double使用时候运算速度差别不是很大,为了保持精度建议使用后者。
当然对内存要求比较高的嵌入式需要好好斟酌一下
long double……不建议用,除非误差实在太大。。。
KevinHo 2010-05-23
  • 打赏
  • 举报
回复
LZ不会吧,应该不会提示这样的警告的。
double和float其实就是精度不同的浮点数,前者是双精度,后者是单精度。
要不然,你这么试试,float i = 6.0f; 看看这样还会不会报警告
ctwoz 2010-05-23
  • 打赏
  • 举报
回复
我是初学者,一般用double,float很少用。。。。。
lbh2001 2010-05-23
  • 打赏
  • 举报
回复
C标准规定浮点常量默认是double,要符合标准用后缀f或F
float f = 6.0f;
findcsdn 2010-05-23
  • 打赏
  • 举报
回复
什么场合用float不行? 只要精度合适,应该都可以吧!

你用什么编译器,我在Vc6上没有警告。


chaoliu1024 2010-05-23
  • 打赏
  • 举报
回复
double精度比float高!所以好多场合使用float不行,因为精度不够...
但高精度的代价是占用更多的内存...
fay8048 2010-05-23
  • 打赏
  • 举报
回复
精度不同,占用内存大小不同,至于不同硬件位数,用语言自己侧
cao_julians 2010-05-23
  • 打赏
  • 举报
回复
1.先说硬件层面:PC机的CPU中的浮点数运算器是80位的,称为long double型的,存在着一定的运算误差(在低位),存储时改用double(64位)类型就有足够的精度了,但用float(32位)类型存储就引入了很大的舍去误差。
2.由此标准库的数学函数不论是参数还是返回值的类型都选用double,不加后缀f的字面值(如3.1416)自动处理为double类型
3.当涉及到浮点数的迭代运算时,用float类型相当于用80位算、舍去低位用32位存,再用80位算、...
完全是浪费“资源”
==========================
而在ARM或51系列CPU中,有无硬件浮点数运算器,是多少位的,另当别论
笑遍世界 2010-05-23
  • 打赏
  • 举报
回复
笔误了一下改为:double 绝对值小于10e-308的数被处理成0值
笑遍世界 2010-05-23
  • 打赏
  • 举报
回复
很多楼上 都说的很清楚了。。。 还是应该看看课本的这个,然后自己写程序试一下吧。。
C编译器通常默认浮点数是double的,且float的运算也都会先转化为double再运算的(谭浩强的书中也说过),所以才有你所提到的warning。
从存储结构和算法上来讲,double和float是一样的,不一样的地方仅仅是float是32位的,double是64位的,所以double能存储更高的精度。 (当然这个位数和机器、编译器有关)
float数值范围约在-10e38~10e38,并提供7位有效数字位,绝对值小于10e38地数被处理成零值 double数值范围约在-10e308~10e308,并提供15~16位有效数字,绝对值小于10e308地数被处理成零值

其他原理可以看这里:http://dev.firnow.com/course/3_program/c++/cppsl/2008629/129103.html

[Quote=引用 10 楼 shangqiuzuidong 的回复:]

double精度比float高!所以好多场合使用float不行,因为精度不够...
但高精度的代价是占用更多的内存...

C标准规定浮点常量默认是double,要符合标准用后缀f或F
C/C++ codefloat f = 6.0f;


上楼的已经说得很清楚
[/Quote]

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧