前面的文章
嵌入式Linux:float 和 double (我内存里的浮点型数据?)我记得之前在数据类型里面说过一个概念,棱子,也叫模子
我们经常说取模,取模,也是这个道理
比如一个
char i = 350;
那么这个i 取模后,肯定没有350,因为i的模子大小char,char的模子大小是
0~255 - 一共256个数
所以上面的 printf("%d",i) 输出的应该是 350 - 256 = 94
但是浮点数是不支持模运算的,所以引进了溢出这样的说法
nan 不等于任何浮点数值,包括它自身在内;即它与任何数比较均返回false。
我们数学里面有实数,所以C语言里面有了浮点型,想用浮点型来表实实数,但是如果这个实数的小数点无限长,就不可能真实的表达这个实数,所以,只能近似的表示实数。
列举man和inf的几个情况
我们用一个C程序验证一下
#include<stdio.h>
void main(void)
{
float x = 1.2;
printf("%f\n",x/0.0);
printf("%f\n",-x/0.0);
printf("%f\n",0.0/0.0);
printf("%f\n",0.0*(x/0.0));
printf("%f\n",(x/0.0)*(x/0.0));
printf("%f\n",x/0.0 + x/0.0);
printf("%f\n",x/0.0 - x/0.0);
printf("%f\n",x/(x/0.0));
printf("%f\n",x/(-x/0.0));
}输出
首先,对于 Nan,可以用下面的代码实现:
bool IsNumber(double x)
{
// 这里的比较操作看上去总是会得到 true
// 但有趣的是对于 IEEE 754 浮点数 NaN 来说总会得到 false!
return (x == x);
}而下面的代码可以判断一个浮点数是否是有限的(finite, 即既不是 NaN 又不是 infinite):
bool IsFiniteNumber(double x)
{
return (x <= DBL_MAX && x >= -DBL_MAX);
}
//其中,DBL_MAX 是 <float.h> 中预定义的常量。把上面两个函数结合起来,还可以实现一个浮点数是否是 Inf 的判断。

欢迎关注微信公众号-嵌入式Linux
觉得不错,请帮忙转发,点赞,您的每一次支持,我都将铭记于心
原文作者:;如有侵权,请联系管理员删除。