C++中检查浮点数值有效性

今天在项目中检查到一个bug,程序会在某些情况下崩溃,最终认定是计算一个比值时,被除数和除数均为零,导致计算结果是个无效值,在后面的代码将使用这个无效值时导致了崩溃。需要对这个结果是否有效进行判断。


下面列出 IEEE 推荐的对浮点型的常用函数,包括特殊值(无穷、无效)的判断:

/* These are also declared in Mingw float.h; needed here as well to work 
   around GCC build issues.  */
/* BEGIN FLOAT.H COPY */
/*
 * IEEE recommended functions
 */
#ifndef _SIGN_DEFINED
#define _SIGN_DEFINED
  _CRTIMP double __cdecl _chgsign (double _X);
  _CRTIMP double __cdecl _copysign (double _Number,double _Sign);
  _CRTIMP double __cdecl _logb (double);
  _CRTIMP double __cdecl _nextafter (double, double);
  _CRTIMP double __cdecl _scalb (double, long);
  _CRTIMP int __cdecl _finite (double);
  _CRTIMP int __cdecl _fpclass (double);
  _CRTIMP int __cdecl _isnan (double);
#endif
_chgsign (double _X)  返回一个与 _X 符号相反数值相同的数(正变为负,负变为正);

_copysign (double _Number,double _Sign) 返回一个与 _Sign 符号相同,与 _Number 数值相同的数;

_logb (double) 求输入数是2的多少次幂,返回值对确切结果向0取整;

_nextafter (double x , double y) 输出x对y方向在double精度上的下一个值;

_scalb (double x, long i) 输出x乘以2的i次幂的结果;

_finite (double) 检查输入是否有效,若为 INT 或 NaN 则返回0,有效数值返回1;

_fpclass (double) 返回一个浮点数的分类,详见:https://technet.microsoft.com/zh-cn/library/39s1cck2.aspx/

_isnan (double) 返回输入是否为 NaN。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值