C++少儿编程(七)—float和double变量

7 认识变量数据类型—float和double

7.1 认识float和double

float 呢,就像是一个小小的数字盒子,可以装下一些比较小的数字。它能表示小数哦,就像我们在做数学题时用到的小数一样。而 double 呢,它是一个更大的数字盒子,可以装下更多更大的数字呢。它比 float 能表示的数字范围更广,也能更精确地表示小数。比如说,如果我们要计算非常非常小或者非常非常大的数字,就可以用 double 来保证准确性哦。

float 和 double 在很多程序中都很有用呢,比如做游戏、画画、计算数学问题等等。

7.2 float和double定义及初始化

  1. 使用浮点数据类型关键字float双精度浮点数据类型关键字double

float 变量名 例如 float height;

double 变量名 例如 double area;

  1. 变量的初始化

float 和 double 变量的初始化与int是一样的。你可以定义为

float height=1.73 , double weight=2.35

也可以不给变量赋值,例如

float height; double weight;

不给变量赋值的时候,系统也会自动给它随机赋一个值

7.3 float和double的存储

float 和 double 变量存储的都是带小数的数,所以要存储这样的数,依然是分为两步。

  1. 第一步将10进度制的小数转换为二进度制

例如将3.625转换成二进制数

1)整数部分的处理:3/2=1.....1,其中为余数1;1/2=0.....1,其中为余数1。

那么整数部分就是11

2)小数部分的处理:

将十进制的0.625转换为二进制,可以进行如下计算:

(1)将小数部分0.625乘2,取整数部分1。

(2)用剩余的小数部分0.25乘2,取整数部分0。

(3)将剩余的小数部分0.25乘2,取整数部分0。

(4) 再将转换好的二进度制数存储到空间里

(5)最后,把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后 取的整数作为低位有效位,得到二进制数0.101。

3) 最终把整数和小数部分合在一起,就是11.101

  1. 第二步 把这个数值存起来,那么如何存呢?

1)首先要将二进制转换成整数位只有1位同时是1的值

例如:11.101=1.1101*2^1

0.001101=1.101*2^(-3)

2) 将转换后的二进制数分三个区域来存它。

float 的存储区:

double的存储区:

sign: 指的是正数和负数,正数指的是大于0的数,负数指的是小于0的数,0代表正数,1代表 负数

exponent:

exponent = n + 偏离值

n是2^n的这个n,比如1.1101*2^1, 那么就是1, 1.101*2^(-3),那么就是-3

float的默认偏离值=127,double的默认偏离值=1023

1) float 如果是2^1,那么就是127+1=128,对应的exponent的值是10000000, 如果 是-3,那么就是127-3=124, 对应的exponent的值是1111100

2)double 的exponent是11bit, 当exponent=1的时候,1023+1=1024,对应的exponent 的值是10000000000,如果是-3,那么就是1023-3=1020,对应的exponent的值是

1111111100

fraction: 这个部分就是1.1101的小数点后面的数,1101,

这个部分float 的大小是23bit , double的大小是52bit

7.4 float和double的存储空间

float 和 double的存储空间,基于上一节所讲的,已经很清楚了,

float 实际上 sign + exponent + fraction = 1+8+23 = 32 bit = 4byte 也就是4字节

double 实际上 sign + exponent + fraction = 1+11+52 = 64 bit = 8byte 也是8字节

7.5 float和double变量可以存其他类型

我们尝试给float变量赋一个整数和一个字母看看会出什么结果。

这个结果与整型一样,赋值一个整数,输出依然是整数,赋值一个字母,输出也依然是整数。

我们再看看double 变量赋一个整数和一个字母看看会出什么结果

这个结果与float一样,赋值一个整数,输出依然是整数,赋值一个字母,输出也依然是整数。

7.6 float 和 double变量的精度

7.6.1 理解变量精度

1) float 存的数少,所以它的精度肯定就差一点,所以叫单精度。单精度范围是-2^128 ~ +2^128,对应的是7个小数位数,当显示小数位数超过7位,7位以后的小数与实际值

是有偏差,所以这就是精度的意义。我们举个例子:

3.1415967896, 小数位数为10位,那么float的情况下,第7位的小数显示的还是对的,第8位

以后的数就会与实际值有偏差。

我们先看看显示完全10位小数的情况:

这个值小数点后第8位开始是794,而实际值是896,是不是不一样了,因为float的精度只能保证到小数点后7位,第8位就不准了。

2)double 存的数多,所以它的精度肯定就好一点,而且是float的精度的两倍,所以叫双精度。

双精度范围是-2^1024 ~ +2^1024,对应的是15个小数位数,当显示小数位数超过15位,15位以后的小数与实际值是有偏差.

7.6.2 变量数值显示

float和double变量存好数值后,我们会发现一个问题,就是输出值的时候小数位数只有4位,见

下面的例子

那么我们想要让它显示更多位怎么办呢?用下面的语句

std::cout << std::setprecision(10); 10就是希望显示的位数

例子:显示7位数字,

  • 8
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值