浮点数

使用浮点类型可以表示带小数部分的数字,计算机将这样的值分为两部分存储,一部分表示值,一部分对值进行放大或缩小,比如3.1415926和31.415926 处了小数点位置不一样,其他都一样,可以将值表示为0.31415926 缩放因子为10 31.415926 缩放因子为100 只不过计算机存放缩放因子是二进制 因此是2的次幂 不是10

浮点的书写方式

  1. 小数点
  2. E表示法
    3.45E6 = 3.45* 10^6 6被成为指数 3.45被称为尾数
    这里要区分负尾数 和 负指数 负指数表示乘以10^(-x)相当于除以10^x
    e+n表示小数点向右移动n位 E~n表示小数点向左移动n位

浮点的有效位

浮点数
该系统保证float有6位的有效位 保证double有15位的有效位。什么是有效位?我们前面谁说过浮点数据存储时是指数和小数分开存储的。比如
3.1415926在内存中是
0..31415926 10^1
算六个有效位 而本系统float有效位是6位 也就是最多精确到float的6位 超出6位后面的精确性未知

#include<iostream>
using namespace std;
int main()
{
	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
		<< endl
		<< "mint = " << mint
		<< endl;
	//因为cout在这里输出的是六位 float可以保证六位浮点数的准确度
	//如果我们把这个结果的有效位扩大,可以看看准确度是否会改变
	cout << "a million tubs = " << tub*million
		<< endl
		<< "a million mints = " << mint * million;
	//可以看到tubs在第七位之后就出现了误差,该系统确保float至少有6位的有效位
	//而double的结果扩大million也没有出现误差,因为他至少保证15位有效位
}
C++

如果我们在代码中没有加入
cout.setf(ios_base::fixed, ios_base::floatfield);//规范显示
则显示的结果会是会是E表示法 对我们判断有效位毫无意义 所以我们一定要在浮点类型的有效位中对数据进行操作,如果超出有效位进行修改,那么修改是无意义甚至是错误的。

浮点常量

默认情况下,程序把类似8.24 2.4E8这样的浮点存储为浮点型,如果希望是float类型,则用float后缀(f或F)

优点

与整数相比 浮点可以表示整数之间的值 其次因为有缩放因子 他们可以表示的范围很大 缺点是浮点的计算速度比整数慢且精度会降低

#include<iostream>
using namespace std;
int main()
{
	float a = 2.34E22f;
	float b = a + 1.0f;
	cout << "a = " << a << endl;
	cout << "b -a = " << b - a << endl;
}
C++

结果应该是1,但是因为精度问题,只能保证至少六位,22位float无法保证,所以是0.

C++编程学习

C++处理数据

2024-11-14 21:05:46

C++编程学习

C++类型转换

2024-11-14 21:17:50

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索

Powered by atecplugins.com