社区
C语言
帖子详情
怎么判断和定义浮点数的无穷大以及NaN?
hummk
2007-06-06 05:48:19
最好是在TC2.0中的方法,不要C++的。
...全文
2758
13
打赏
收藏
怎么判断和定义浮点数的无穷大以及NaN?
最好是在TC2.0中的方法,不要C++的。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
沙发
IEEE-754标准
定义
浮点数
转换工具
- 步骤5:处理特殊情况,如
无穷大
、
NaN
(非数字)等。 #### 3.2 IEEE-754到十进制 - 步骤1:读取符号位,确定数值正负。 - 步骤2:指数处理,根据指数位和偏移量计算实际指数。 - 步骤3:尾数恢复,从二进制形式...
浮点数
(单精度
浮点数
,双精度
浮点数
)
浮点数
的表示法通常还包括一些特别的数值:+∞和 -∞(正负
无穷大
)以及 -
NaN
('Not a Number')。
无穷大
用于数太大而无法表示的时候,
NaN
指示非法操作或者无法
定义
的结果。 在 C++ 中,
浮点数
有六种:float(单...
Verilog
浮点数
加法器
在实现过程中,Verilog代码需要考虑各种边界条件,如零、
无穷大
、
NaN
以及正负
无穷大
的加法。设计完成后,通常会使用硬件仿真工具(如ModelSim、Vivado等)进行功能验证,确保在各种输入情况下都能正确工作。 文件名...
TMS320C3x
浮点数
简介、IEEE754的32位转VC33的32位
浮点数
算法、IEEE754的64位
浮点数
转VC33的40位
浮点数
算法
此外,对于
无穷大
和
NaN
(非数字)的情况,也需要特别处理。 当涉及到64位IEEE 754双精度
浮点数
到40位VC33
浮点数
的转换时,这个过程更为复杂。双精度
浮点数
包含1位符号位、11位指数和52位尾数。由于40位VC33格式无法...
HEX与
浮点数
相互转换
在计算机内部,
浮点数
是以二进制浮点格式存储的,遵循IEEE 754标准,该标准
定义
了如何表示正负
无穷大
、
NaN
(非数字)以及正常数值。然而,当我们需要以人类可读的形式展示这些数值时,十六进制表示就显得尤为重要,...
C语言
70,026
社区成员
243,262
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章