跳至主要內容

浮点数

张威大约 2 分钟c/c++c基础

浮点数

使用浮点数直接使用 double 即可

浮点数字面值表示方法

  1. 小数形式:0.123
  2. 指数形式:3e-3(为3 * 10-3 ,即0.003)

注意:

#include <stdio.h>
//#define PI 3.14
//#define PI 0.314E1
//#define PI 0.314e1
#define PI 31.4e-1
//#define PI 31.4E0.5 e后面只能写整数
int main() {
    printf("PI = %f\n",PI);
}

浮点数的存储方式

image-20231230164803584
image-20231230164803584

浮点型数据是按照指数形式存储的。 系统把一个浮点型数据分成小数部分和指数部分, 分别存放。指数部分采用规范化的指数形式, 指数也分正负 。

float存储为例(4byte = 32bit):

  • 1 位的符号位, 是 0 就代表正数, 1 就代表负数
  • 8位阶码
  • 23位的小数部分, 是通过 2-1+2-2+2-3等去近似一个小数的

double的阶码为11位

image-20231230175132311
image-20231230175132311
image-20231230174224741
image-20231230174224741

**加数 与 加数相差很大 **,会发生精度丢失

image-20231230175233568
image-20231230175233568

我们赋给 a 的值为 1.23456789e10, 加20 后, 应该得到的值为 1.234567892e10, 但是却是 1.23456788e10, 变的更小了, 我们把这种现象称为精度丢失, 原因就是 float 能够表示的有效数字为 7 位, 最多只保证 1.234567e10 的正确性, 如果要达到正确, 我们需要把 a 和 b 均改为 double 类型。

image-20231230175541124
image-20231230175541124