1. 浮点型与零的比较:
1.1 推导:
例:
double a, b; fabs(a - b) < DBL_EPSILON fabs(a - 0.0) < DBL_EPSILON fabs(a) < DBL_EPSILON
如果有两个浮点数比较,
如果fabs(a - b) < DBL_EPSILON,
就证明a = b。
如果 b 等于零,就是和浮点数与零比较,
零也可以省略,
所以fabs(a) < DBL_EPSILON 就相当于a 与零比较。
1.2 实践:
例:
#include #include #include int main() { double a = 0.00001; if (fabs(a) < DBL_EPSILON) { printf("a = 0"); } else { printf("a != 0"); } return 0; }
输出:
输出:a != 0
例2:
#include #include #include int main() { double a = 0.0000000000000001; if (fabs(a) < DBL_EPSILON) { printf("a = 0"); } else { printf("a != 0"); } return 0; }
输出:
输出:a = 0
所以说,
为什么a != 0,因为a还不够小,
只要a 够小,就等于零了。
1.3 总结:
浮点数与零比较:
1. 浮点数存储的时候,是有精度损失的。
2. 浮点数是不能直接用 == 比较的。
3. if (fabs(a - b) < DBL_EPSILON) { }
2. 理解强制类型转换:
强制类型转换只是改变我们对数据的看法,
并不会改变数据。
类型其实就是我们如何看待这段数据,
又或者说我们如何看待这段二进制序列,
因为数据就是以二进制的形式存到内存中。
3.指针与零比较
直接:
#include int main() { int a = 0; int* p = &a; if (p == NULL) { ; } return 0; }
4. switch case 语句:
例:
#include int main() { int day = 1; switch (day) { case 1: printf("星期一\n"); break; case 2: printf("星期二\n"); break; case 3: printf("星期三\n"); break; case 4: printf("星期四\n"); break; case 5: printf("星期五\n"); break; case 6: printf("星期六\n"); break; case 7: printf("星期日\n"); break; default: printf("bug!\n"); break; } return 0; }
这样就能根据输出打印星期了。
写在最后:
以上就是本篇文章的内容了,感谢你的阅读。
如果喜欢本文的话,欢迎点赞和评论,写下你的见解。
如果想和我一起学习编程,不妨点个关注,我们一起学习,一同成长。
之后我还会输出更多高质量内容,欢迎收看。
文章知识点与官方知识档案匹配,可进一步学习相关知识