Day 3_3 补充

1.cin读入一行数据

char str[100];
cin.getline(str,100);

string str;
getline(cin,str);

2.cout控制double型数据精度

添加头文件 “iomanip”

double a = 3.1415926;
cout<<setiosflags(ios::fixed)<<setprecision(2)<<a<<endl;

3.浮点数的比较!!!

1.相等判断

浮点数在计算机中存储并不总是精确的,如3.14,在存储可能是3.1399999或3.14000001,但是 "=="是完全相等才会是true,于是引入一个极小量eps对误差进行修正

一个数a落在[b-eps.b+eps]范围内,就说a==b,一般eps取 10^(-8)比较合适

const double eps = 1e-8;
或者使用宏定义方式
#define Equ(a,b) ((fabs((a)-(b)))<(eps))

实例

#include<stdio.h>
#include<math.h>
const double eps = 1e-8;
#define Equ(a,b) ((fabs((a)-(b)))<(eps))
int main(){
	double db = 1.23;
	if(Equ(db,1.23)){	//在这里 db == 1.23 也是可以的
		printf("true");
	}else{
		printf("false");
	}
	return 0;
}

一般没有没经过容易损失精度的计算,直接判断都行,但是经过容易损失精度的计算,就不行了,比如下面这个

	double db1 = 4 * asin(sqrt(2.0) / 2);
	double db2 = 4 * asin(sqrt(3.0) / 2);
	if(db1 == db2){
		printf("true");
	}else{
		printf("false");
	}

显然这就是误差较大的运算,受到了误差的影响

2.大于
#define More(a,b)  (((a) - (b))>(eps))
3.小于
#define Less(a,b)  (((a) - (b))<(-eps))
4.大于等于
#define MoreEqu(a,b)  (((a) - (b))>(-eps))
5.小于等于
#define More(a,b)  (((a) - (b))<(eps))
6.圆周率π

cos(π) = -1

const double Pi = acos(-1.0);

4.时间复杂度 空间复杂度 编码复杂度

一般空间够用,考虑用空间换时间的策略编写代码

发布了26 篇原创文章 · 获赞 3 · 访问量 217

猜你喜欢

转载自blog.csdn.net/qq_41898248/article/details/103749691