栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ Primer Plus学习 三 处理数据 剩余部分

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ Primer Plus学习 三 处理数据 剩余部分

3.2const限定符

常量的符号名称,符号名称指出了常量表示的内容。如果程序在多个地方使用同一个常量,则需要修改该常量时,只需要修改一个符号定义即可。

此时我们可以想到一个东西:#define ZERO 0;(旁注“符号常量——预处理器方法”)。

C++有另外一种处理符号常量的方法,const关键字

        const type name = value

const int Months = 12

        const 是缩写,原词是constant,意为不变的

3.3浮点数

本质:科学表示法

        计算机组成原理中的浮点型:

 上面的图是内部的浮点数表示,用的是二进制。

3.3.1 书写浮点数

 平时的小数书写方法 :3.4,0.003 ,0.5 E表示法

       E表示法,就是科学计数法。例如:3.45E6指的是3.45 与 10^6相乘。

       指数可以是负数,所以3.45E-5,就是3.45*10^-6

3.3.2 浮点数的类型

 float ,double ,long double

 根据黄色的地方看出,三种浮点数类型的有效位:

float:6

double:15

long double: 18

有关cout.setf()的用法,第一原型和第二原型

C++ 中的 cout.setf() 函数_白水的博客-CSDN博客_cout.setf()

#include

int main() {
	using namespace std;
	cout.setf(ios_base::fixed, ios_base::floatfield);
	float tub = 10.0 / 3.0;
	double mint = 10.0 / 3.0;
	const float Million = 1.0E6;

	cout << "tub = " << tub;
	cout << ",a million tubs = " << Million * tub;
	cout << ",nten million tubs = ";
	cout << 10 * Million * tub << endl;

	cout << "mint = " << mint;
	cout << " and a million mints = " << mint * Million << endl;
	return 0;

}
tub = 3.333333,a million tubs = 3333333.250000,
ten million tubs = 33333332.000000
mint = 3.333333 and a million mints = 3333333.333333

float符号位1位,指数位8位,尾数位23位。

 

如果我们先不考虑,指数位:
        能表示的最大的二进制数是2^23-1 1111111 11111111 11111111,因为科学计数法,而且由于二进制的原因,所以小数点前一位,一定是1。所以最大的数其实是2^24-1,11111111 11111111 11111111。

float的指数位是无符号的,它的正负区分通过采用一个偏移值来确定,下表可以查到float单精度的偏移值是127。偏移前表达范围[0,255],经过偏移后,8位指数位所能表达的范围是:[-127,128]。

不过通过查看float.h文件发现,float二进制最大指数是128,最小-125

 

 该图片来自AlbertSfloat的精度和取值范围_AlbertS Home of Technology-CSDN博客_float的取值范围

所以最大取值为1.11111111 11111111 1111111(24个一)*2^127

 

与文件中的 float的符号常量一致。他妈的终于弄懂他这逼玩意范围了

知道范围如何求得以后,就容易知道,为啥精度缺失了。因为尾数位有限,在尾数位+1(科学计数法,二进制小数点前一位,必然是1,不理解可以看十进制的科学计数法。小数点前一位可以是1-9里的任意一个数字,所以二进制,只能是1,尾数位只存储小数点之后的,在这里尾数位加一),也就是24位二进制所表示的最大范围内[0,16777215]。有效位在这个范围内的数(先忽略小数点)都可以被精确表示。我看了很多资料,关于float的精确度,我觉得很晦涩难懂,我想如果借助有效位这个概念,便一目了然了。

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/717818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号