C语言菜鸟基础教程之单精度浮点数与双精度浮点数

 更新时间:2017年10月03日 09:34:57   作者:翡翠森林Z  
在C语言中,单精度浮点数(float)和双精度浮点数(double)类型都是用来储存实数的,双精度是用记忆较多,有效数字较多,数值范围较大。

上节课 简单介绍了浮点数。计算机程序中的浮点数分为单精度浮点数和双精度浮点数。

单精度和双精度精确的范围不一样。

计算机里的最基本的存储单位用位(bit)来表示。bit只能用来存储0或1。
稍大一点的单位是字节(Byte,简写为B)。
再大一级的是千字节(kilo Bytes),用k来表示。
再大一级的单位是兆字节(Mega Bytes),用M来表示。一张照片的大小通常为1~3M。
再大一级的单位为G。一部高清电影的大小通常为1~2G。
再大一级的单位为T。

换算关系为:

1B = 8bit
1k = 1024B = 2^10 B
1M = 1024k = 2^20 B
1G = 1024M = 2^30 B
1T = 1024G = 2^40 B

单精度(float)在计算机中存储占用4字节,32位,有效位数为7位(6位小数+小数点)。
双精度(double)在计算机中存储占用8字节,64位,有效位数为16位(15位小数+小数点)。
不管是float还是double,在计算机中的存储都遵循IEEE规范,使用二进制科学计数法,都包含三个部分:符号位、指数位和尾数部分。其中float的符号位、指数位(即整数部分)、尾数部分分别为1, 8, 23。双精度则分别为1, 11, 52。

float

double

精度主要取决于尾数部分的位数,float为23位,最小为2的-23次方,约等于1.19乘以10的-7次方,所以float小数部分只能精确到后面6位,加上小数点算做一位,即有效数字为7位。
类似,double 尾数部分52位,最小为2的-52次方,约为2.22乘以10的-16次方,所以精确到小数点后15位,有效位数为16位。

程序验证:

#include <stdio.h>

int main()
{

  float a = 1.123456789;
  printf("a = %20.9f\n", a);
  
  double b = 2.123456789;
  printf("b = %20.9f\n", b);
  
  return 0;
}

注意:这里%20.9f表示浮点数总共有20位,其中小数占9位。不足20位的部分,左侧用空格来填充。

运行结果:

a =     1.123456836
b =     2.123456789

从运行结果可以看出,单精度浮点数小数部分只有前6位是准确的,后三位是不准确的。双精度小数部分9位都是准确的。

相关文章

  • 详解C++的模板中typename关键字的用法

    详解C++的模板中typename关键字的用法

    在C++的Template中我们经常可以见到使用typename来定义类型名称,更加具体的我们就在接下来为大家详解C++的模板中typename关键字的用法,需要的朋友可以参考下:
    2016-06-06
  • C语言不定长数组及初始化方法

    C语言不定长数组及初始化方法

    今天小编就为大家分享一篇C语言不定长数组及初始化方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Linux下g++编译与使用静态库和动态库的方法

    Linux下g++编译与使用静态库和动态库的方法

    下面小编就为大家带来一篇Linux下g++编译与使用静态库和动态库的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • 基于C语言EOF与getchar()的使用详解

    基于C语言EOF与getchar()的使用详解

    希望本文可以对初学C的朋友提供一点帮助,也希望能和其他朋友进行交流。其中理解不对的地方若能得到指正和建议,本人将不胜感激
    2013-05-05
  • windows下在vim中搭建c语言开发环境的详细过程

    windows下在vim中搭建c语言开发环境的详细过程

    这篇文章主要介绍了windows下在vim中搭建c语言开发环境,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-05-05
  • C语言实现随机读写文件的函数详解

    C语言实现随机读写文件的函数详解

    文件的随机读写,可以在文件中指定的任意位置读或者写。这篇文章主要为大家详细介绍了C语言实现随机读写文件的3个函数,感兴趣的可以了解一下
    2023-03-03
  • 简要说明C语言中指针函数与函数指针的区别

    简要说明C语言中指针函数与函数指针的区别

    这篇文章主要介绍了C语言中指针函数与函数指针的区别,指针函数和函数指针是C语言入门学习中的基础知识,需要的朋友可以参考下
    2016-04-04
  • C++ 创建桌面快捷方式 开始菜单的实现代码

    C++ 创建桌面快捷方式 开始菜单的实现代码

    这篇文章介绍了C++ 创建桌面快捷方式,开始菜单的实现代码,需要的朋友可以参考一下
    2013-06-06
  • c++中的自增/自减操作方式

    c++中的自增/自减操作方式

    这篇文章主要介绍了C++中的自增和自减运算符,包括前缀和后缀形式,并通过一个具体的例子解释了自增/自减表达式的值与函数参数传递的关系,文章指出,自增/自减表达式的值是在表达式求值时确定的,而不是在自增/自减运算后
    2025-03-03
  • 带你了解C++this指针的用法及其深究

    带你了解C++this指针的用法及其深究

    这篇文章主要介绍了C++中this指针的用法,对初学者而言是非常重要的概念,必须加以熟练掌握,需要的朋友可以参考下,希望能给你带来帮助
    2021-08-08

最新评论