前言
提示:const与浮点数的复习:
一、const限定符
与C相比,C++增加了const限定符来更好的处理符号常量,
1、创建常量
通用格式如下:
const type name = value;
代码如下(示例):
const int Months = 12;
常量被初始化后编译器将不允许在修改该常量的值。
2、常量的命名规则
常见的命名规则是将名称的首字母大写,以提醒您Months是一个常量,当然,这并不是通用约定。也可以将整个字母进行大写,或者在变量前加一个k,例如kmonths。
关于常量的命名约定有许多,很多组织都有特殊的编码约定,要求其程序员遵守。
二、浮点数
浮点类型是C++的第二组基本类型。它能够表示带小数部分的数字。浮点数提供的值范围很大。
1、浮点数的机制
计算机将浮点数,也就是带小数部分的数字分成两个部分进行储存。
一部分表示值,另一部分用于对值进行放大或缩小。
例如:3.1415926和314.15926。
这两个数字除了小数点的位置不同,其他都是相同的。可以将第一个数字表示为0.31415926(基准值)和10(缩放因子),而将第二个数表示为0.31415926和1000.
缩放因子的作用是移动小数点的位置,也正是因为此,我们将其称为浮点。
C++内部表示浮点数的方法与此相同,不过它基于的是二进制数,因此缩放因子是2的幂,不是10的幂。
2、浮点数的书写
C++有两种浮点数的书写方式
第一种:
12.3
0.0
6.8
等等,这与我们经常用到的小数写法一致,我们称为标准小数点表示法。
第二种:
6.8e+8
6.8E+8
6.8E8
6.8e8
等等,像6.8e+8指的是6.8与10的八次方相乘的结果。因此6.8e+2表示6.8*100,2称为指数,6.8称为尾数。
E表示法确保数字以浮点格式存储,但注意,即可以使用e,也可以使用E,指数可以是正数,也可以是负数。
+ | 6 | . | 8 | E | + | 8 |
---|---|---|---|---|---|---|
可选的+、-号 | 数字 | 小数点可选 | 数字 | 可使用E、e | 可选的+、-号或省略 | 数字 |
注意
指数为负意味着除以10的乘方。
3、浮点类型
根据表示的有效位数和允许的指数最小范围可以分为三种浮点类型:float、double、long double。
有效位:
是指数字中有意义的位,例如68596的有效位数为5,但是68000的有效位数仅为2位,6和8,其余位数仅为占位符,有效位数不依赖小数点的位置,有几个有效数字便有几个有效位数。
对有效位的要求:
float至少32位,double至少48位,且不少于float,而long double至少和double一样多。
然而,通常float为32位,double为64位,long double为80、96或128位。
另外,指数范围三者至少是-37~37
4、浮点常量
在程序中书写浮点常量时,程序通常将其储存为double类型,如果您希望是float类型,则可以使用f或F后缀,long double则可以使用l或L后缀。
cout << 6.8f << 6.8F << 6.8l << 6.8L << endl;
5、浮点数的缺点
浮点运算速度比整数运算慢,且精度降低
#include <iostream>
using namespace std;
int main()
{
float f1 = 6.88E+22f;
float f2 = f1 + 1f;
cout << "f1=" << f1 << endl;
cout << "f2 - f1 = " << f2 - f1 << endl;
return 0;
}
这个程序的结果看上去应该为1,因为一个数加上1再减去它本身,结果为1。
但以下为输出结果:
f1 = 6.88E+22
f2 - f1 = 0;
原因在于6.88E+22是一个23位的有效数字,加上1后,末尾的零变为1,但float只能表示前6或前7位,因此在对23位数字进行修改时,无法对f2产生任何影响。