社区
C语言
帖子详情
怎么判断和定义浮点数的无穷大以及NaN?
hummk
2007-06-06 05:48:19
最好是在TC2.0中的方法,不要C++的。
...全文
2889
13
打赏
收藏
怎么判断和定义浮点数的无穷大以及NaN?
最好是在TC2.0中的方法,不要C++的。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
13 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
aleda303
2012-04-26
打赏
举报
回复
<接上>
使用中,
float a = NAN ;
double b = NAN;
系统中类型会自动转换
aleda303
2012-04-26
打赏
举报
回复
#define NAN (0.0/0.0) //无效值NaN
#define isNAN(x) ((x)!=(x))
#define INF (1.0/0.0) //无穷大
#define PINF INF //正无穷大
#define NINF -INF //负无穷大
#define isINF(x) (((x)==PINF)||((x)==NINF))
#define isPINF(x) ((x)==PINF)
#define isNINF(x) ((x)==NINF)
hummk
2007-06-07
打赏
举报
回复
向一些数学函数计算错误或超过范围会返回特殊浮点值。那么对于自己编的函数,怎样以最简单的方式返回特殊浮点值?
mLee79
2007-06-07
打赏
举报
回复
混了这么多年, 见过的用过的还没见过不符合 IEEE754 标准的(不支持浮点数的除外) ...
milksea
2007-06-07
打赏
举报
回复
当然不是无穷大,但一般地可以代替无穷大,实用就可以了。非要写一些依赖具体浮点数内部表示的代码,更容易出错。
hummk
2007-06-06
打赏
举报
回复
DBL_MAX
FLT_MAX
LDBL_MAX
这些不是无穷大,而是浮点数能表示的最大值。
milksea
2007-06-06
打赏
举报
回复
无论如何,用编程环境给出的函数比自己写函数处理这种移植性问题要好得多。
milksea
2007-06-06
打赏
举报
回复
无穷大可以用这几个宏代替(float.h):
DBL_MAX
FLT_MAX
LDBL_MAX
TC 2.0是否正确实现了NaN,我不清楚,头文件中没给。如果用MingW GCC,则有几个非标准的函数可以用(float.h):
_CRTIMP int __cdecl _finite (double); /* 有限数 */
_CRTIMP int __cdecl _isnan (double); /* 不是数 */
_CRTIMP int __cdecl _fpclass (double); /* 返回数的类型,后面是返回值的宏 */
/* These are also defined in Mingw math.h, needed to work around
GCC build issues. */
/* Return values for fpclass. */
#ifndef __MINGW_FPCLASS_DEFINED
#define __MINGW_FPCLASS_DEFINED 1
#define _FPCLASS_SNAN 0x0001 /* Signaling "Not a Number" */
#define _FPCLASS_QNAN 0x0002 /* Quiet "Not a Number" */
#define _FPCLASS_NINF 0x0004 /* Negative Infinity */
#define _FPCLASS_NN 0x0008 /* Negative Normal */
#define _FPCLASS_ND 0x0010 /* Negative Denormal */
#define _FPCLASS_NZ 0x0020 /* Negative Zero */
#define _FPCLASS_PZ 0x0040 /* Positive Zero */
#define _FPCLASS_PD 0x0080 /* Positive Denormal */
#define _FPCLASS_PN 0x0100 /* Positive Normal */
#define _FPCLASS_PINF 0x0200 /* Positive Infinity */
#endif /* __MINGW_FPCLASS_DEFINED */
mLee79
2007-06-06
打赏
举报
回复
酱紫 ...
typedef unsigned long ul;
int isINF( float f )
{
ul x = *(ul*)&f;
return 0==(x&0x7ffffful) && 0x7f800000ul==(x&0x7f800000ul);
}
int isNaN( float f )
{
ul x = *(ul*)&f;
return 0!=(x&0x7ffffful) && 0x7f800000ul==(x&0x7f800000ul);
}
huashizhixin
2007-06-06
打赏
举报
回复
上问转自 happy__888([顾问团]寻开心 www.e-jjj.com)
huashizhixin
2007-06-06
打赏
举报
回复
转
关于32位浮点数的结构,你可以看我的btlog当中的描述部分
http://btlog.csdn.net/happy_888
根据IEEE的标准,浮点数的定义如下
符号位 指数位 小数部分 指数偏移量
单精度浮点数 1 位[31] 8位 [30-23] 23位 [22-00] 127
双精度浮点数 1 位[63] 11 位[62-52] 52 位[51-00] 1023
我们以单精度浮点数来说明:
符号位,表述浮点数的正或者负
指数实际也有正负的,但是没有单独的符号位,而是采用了一个偏移来表示
在计算机的世界里,进位都是二进制的,指数表示的也是2的N次幂
这个数据格式当中的,指数是8位,可表达的范围是0到255
而对应的实际的指数是-127到+128
这里特殊说明,-127和+128这两个数据在IEEE当中是保留的用作多种用途的
-127表示的数字是0
128和其他位数组合表示多种意义,最典型的就是NAN状态
小数部分,并不是一个浮点数的实际的小数
实际的小数在这个小数前面还保留了一个1
拿浮点数1.0来说
符号位是0, 实际指数是0,对应这里的指数就是127了,也就是0x7f
而小数部分就是1.0了, 1是暗含的不存储,实际的小数部分就是0了
因此组合起来的数据就是,0x3f80000
16位的也是类似的,自己分析一下
WORD w = *((WORD*)(&f))
是把一个浮点数按照内存结构转化成为一个unsigned int 16位的结构
TC 2.0不是C++ ,是c++的话就可以简单 w = (int&) f; 就可以了
mLee79
2007-06-06
打赏
举报
回复
按IEEE标准搞三, 阶码全1,尾数全0的是INF, 阶码全1尾数非全0的就NaN ..
huashizhixin
2007-06-06
打赏
举报
回复
沙发
浮点数
NaN
和INF(#IND, #INF)
NaN
&INF
定义
在一些情况会出现无效的
浮点数
,例如除0,例如负数求平方根等,像这类情况,获取到的
浮点数
的值是无效的。
NaN
即 Not a Number 非数字 INF 即 Infinite
无穷大
python中的
nan
什么意思_python中的
nan
是什么意思
NaN
(not a number),在数学表示上表示一个无法表示的数,这里一般还会有另一个表述inf,inf和
nan
的不同在于,inf是一个超过浮点表示范围的
浮点数
(其本质仍然是一个数,只是他
无穷大
,因此无法用
浮点数
表示,比如1/0),而
nan
则一般表示一个非
浮点数
(比如无理数)。相关推荐:《Python基础教程》
NaN
是
浮点数
的一个值,代表“不是数”,通常是除0错误。python中可以用floa...
java中的
NAN
和INFINITY
我们知道,在整型运算中,除数是不能为0的,否则直接运行异常。但是在
浮点数
运算中,引入了无限这个概念,我们来看一下Double和Float中的
定义
。在
浮点数
运算时,有时我们会遇到除数为0的情况,那java是如何解决的呢?java
浮点数
运算中有两个特殊的情况:
NAN
、INFINITY。3.无限做除了乘以0意外的运算,结果还是无限。3.无限做除了1、2、3外的运算结果是什么?2.无限除以0,结果不变,还是无限。1. 无限乘以0,结果为
NAN
。1.无限乘以0会是什么?2.无限除以0会是什么?
计算值时为
Nan
/ inf
inf和
nan
含义如下: INF表示“
无穷大
”,是infinite的缩写。
NAN
表示“无效数字”,是Not a number的缩写。 2.inf是不会崩溃的,但
nan
是会崩溃的 本人出现的情况: 仔细研究后发现,原来是我获取的 UIImage 对象 等于 nil 了,以至于 image.size.height 值 和 image.size.width 的值,都拿不到了; 那么image的...
特殊
浮点数
1.#IND 1.#INF的
判断
一、特殊
浮点数
的含义 1.#INF / inf:这个值表示“
无穷大
(infinity 的缩写)”,即超出了计算机可以表示的
浮点数
的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。 -1.#IND /
nan
:这个的情况更复杂,一般来说,它们来自
C语言
70,039
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章