原文地址:点击打开链接
进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。
1.特殊浮点数的含义
(1)1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得到一个1.#INF / inf值;相应的,如果用 0 除一个负整数也会得到 -1.#INF / -inf 值。
(2)-1.#IND / nan:这个的情况更复杂,一般来说,它们来自于任何未定义结果(非法)的浮点数运算。"IND"是 indeterminate 的缩写,而"nan"是 not a number 的缩写。产生这个值的常见例子有:对负数开平方,对负数取对数,0.0/0.0,0.0*∞, ∞/∞ 等。举个例子,如果log()内的值是1.#INF,得到的log值就会是,1.#INF。
(3)所以简而言之,如果遇到 1.#INF / inf,就检查是否发生了运算结果溢出除零,而遇到 1.#IND / nan,就检查是否发生了非法的运算。
2.特殊浮点数的判断
很多 C 库都提供了一组函数用来判断一个浮点数是否是无穷大或 NaN。
int _isnan(double x) 函数用来判断一个浮点数是否是 NaN,而 int _finite(double x) 用以判断一个浮点数是否是无穷大。
你可能已经注意到了,上面两个函数都是以下划线开头的,因此在可移植性上可能是存在问题的,那么如何实现一个通用的判断版本呢?首先,对于 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 是 中预定义的常量。
把上面两个函数结合起来,还可以实现一个浮点数是否是 Inf 的判断。
- 椰浆芒果糯米饭(附芒果玫瑰花做法)椰浆芒果糯米饭(附芒果玫瑰花做法) 28.4万人浏览 2.1万人收藏 964人做过 APP中查看更多做法 作者: 吴双的早餐食光 第一次吃芒果糯米饭是在...
- 我感染「BA.5」了嗎?咳嗽、喉嚨痛...重複感染是特徵!BA.5「潛伏期、10大症狀、預防方法」這篇一次看Omicron BA.4、BA.5新亞型變異株是Omicron變種病毒的分支。這兩種變異株以及美國正在流行的BA2.12.1變異株,都有在「L452」基因序列上的突變位點,...
- Windows 11滑稽病毒是什么?如何彻底清除?windows 11 纯净版系统下载无任何广告 系统来自MSDN,只提供纯净原版,支持正版,放心使用。 立即下载 Windows 11滑稽病毒是什么?如何彻底清除?...
- 2025年最新 | 傻瓜式教学 | 如何在国家中小学智慧教育平台上下载高清电子版教材前言 很多人都需要用到电子课本,特别很多学生升级升班后想在学校发下个学期的教材之前,利用暑假的时间提前预习。但是网上搜到的,往往...
- 泰拉瑞亚死神镰刀怎么获得泰拉瑞亚死神镰刀怎么获得?部分玩家可能不太了解游戏中的死神镰刀怎么获得,下面带大家了解一下该镰刀的获取方法,感兴趣的玩家往下看...
- 好雨知时节,当春乃发生。好雨知时节,当春乃发生。 出自唐代杜甫的《春夜喜雨》 译文好雨知道下雨的节气,正是在春天植物萌发生长的时候。 注释知:明白,知道,...
- 鸣什么开道成语,无什么之什么鸣什么开道成语?词语是鸣锣开道。鸣锣开道[míngluókāidào]意思是封建时代官吏出门时,前面开路的人敲锣喝令行人让路。比喻为某种事物...
- 以依飞米内衣的质量与舒适度为主题(深度解析以依飞米内衣的品质优势和顾客口碑)作为一家国内知名内衣品牌,以依飞米内衣一直以来致力于为顾客提供高质量和舒适度的产品。本文将从多个方面深入解析以依飞米内衣的品质...
- 手机拍照进化论:为什么需要图像算法?人类进入智能手机时代后,摄影方式也发生了巨大变化:用来拍照的不再只是镜头和传感器了,背后还加载着一系列的图像算法,它可以用更快...
- 泰国铢银联汇率1. 境内发行的银联卡在国外取现每卡每天有等值1万人民币的限额。(根据外管局最新要求,自2018年1月1日起,每人名下的所有银联卡综合累计境...