数据类型说明 实型

1 实型常量的表示方法

实数又称浮点数,实数有两种表示形式。

(1)十进制小数形式,它由数字和小数点组成(注意必须有小数点)

如:.123(0.123), 123.(123.0)

(2)指数形式

如:123e3或123E3都代表123*10^3,但注意字母e或E之前必须有数字,且e后面的指数必须为整数。

2 实型变量

2.1 实型数据在内存中的存放形式

一个实数数据一般在内存中占4个字节(32位)与整型数据的存储方式不同,实型数据是按指数形式存储的,系统把一个实型数据分成小数部分与指数部分,分别存放。指数部分采用规范化的指数形式。

如:3.14159 的存放形式如下

+  .314159  1

第一部分符号‘+’表示符号 +

第二部分 .314159 表示小数部分

第三部分 1 表示指数 10^1

实际上在计算机中是用二进制数来表示小数部分以及用2的幂次来表示指数部分

在4个字节(32位)中,究竟用多少位表示小数部分,多少位来表示指数部分,标准C并无具体规定,由各C编译系统自定,不少C编译系统以24位表示小数部分(包括符号)以8位表示指数部分(包括指数的符号)小数部分占的位数越多,数的有效数字就越多精度就越高,指数部分占的位数越多,刚能表示的数值范围越大。

2.2 实型变量的分类

C实型变量可分为:

单精度(float) 32位 有效数字 6~7位  数值范围 10^-37 ~ 10^38

双精度(double)64位 有效数字 15 ~16位 数值范围 10^-307 ~ 10^308

长双精度型(long double)128位 有效数字 18 ~ 19 位 数值范围 10^-4931 ~ 10^4932

2.3 实型数据的舍入误差

 由于实型变量是用有限的存储单元存储的,因此能提供的有效数字总是有限的,在有效位以外的数字将被舍去,由此可能会产生一些误差。

看下面的程序

#include <stdio.h>

void main()

{

  float a, b;

  a = 123456.789e5;

  b = a + 20;

  printf("%f\n", b);
}

运行的结果是 12345678848.000000

不是想像是 12345678920

可以看到前8位是准确的,后几位不是准确的

原文地址:https://www.cnblogs.com/qkhhxkj/p/2089197.html