float-计算机基础

#include<stdio.h>
main()
{
    float a;
    double b;
    a=123456.789e4;
    b=123456.789e4;
printf("%f\n%f\n",a,b);
}

运行结果

[leo@localhost ~]$ cd lyj
[leo@localhost lyj]$ gcc float.c
[leo@localhost lyj]$ ./a.out
1234567936.000000
1234567890.000000
[leo@localhost lyj]$ 
  • 为什么float类型输出的数和double类型不一样?

float类型可以精确表示7个十进制有效数位,后面的数位是舍入后的结果,舍入结果可能会更大也可能会更小;所以1234567前七位是精确表示的,后面的位数可能舍,可能入。
double类型可以精确到17个十进制有效数位,对于b来说,可以全部输出。

  • 为什么float类型只能精确表示7个十进制数位?

从浮点数二进制表示格式可以知道,尾数部分表示的是23位有效数位,因为23位尾数表示的是小数点右边的数,小数点左边有一位默认为1的位,所以一共有24位有效数位,2^{24}-1=16777215,转化为十进制10^7<16777215<10^8,所以float类型只能精确到7位。

  • 注意:这只能说明超过7位一定不能精确表示,而小于7位有可能被精确表示。0.1就不能被精确表示,因为浮点数表示的并不是连续的数,而是离散的数。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 在java中float赋值给double,会产生精度问题。 输出为2.0999999046325684。 小...
    我叫小小强阅读 19,510评论 2 23
  • 目录 1、八种基本数据类型 八种数据类型分别是:(整数型) byte,short,int,long,(浮点型)fl...
    AnchEvil阅读 1,776评论 0 0
  • ackage test1; public class Test2 { /** * @param args */ p...
    Aldeo阅读 1,422评论 0 1
  • 浮点类型 用于表示有小数部分的数值。Java中有两种浮点类型, 也可以用16进制表示浮点数值。例如0.125=2-...
    狮_子歌歌阅读 1,441评论 0 2
  • 这个冬天,连绵地下雨,布满天空的阴云,温度却并不凌冽,20度的空气,温暖柔和得让人感觉就像是春天到了,在房子后边那...
    莫之秋冬阅读 335评论 0 1

友情链接更多精彩内容