浮点数NaN和INF(#IND, #INF)
NaN&INF定义
在一些情况会出现无效的浮点数,例如除0,例如负数求平方根等,像这类情况,获取到的浮点数的值是无效的。
NaN 即 Not a Number 非数字
INF 即 Infinite 无穷大
通常无效浮点数的内存表示方法是:
根据IEEE 754标准:
阶码全1,尾数全0表示无穷大INF。例如1.0/0.0
阶码全1,尾数非全0的表示无效数NaN。例如:求负数的平方根,例如0.0/0.0。
(注意: int型时除0是非法的,产生运行异常。Remember,integer division by 0 causes a runtime exception.)
INF无穷大:在doulbe/float时的取值
float f = 0; (4字节 1位符号位,8位指数,23位小数,指数偏移127)
*(UINT*)&f = 0x7F800000L;//正无穷(二进制 [0111 1111] [1000 0000] [0000 0000] [0000 0000])
*(UINT*)&f = 0xFF800000L;//负无穷(二进制 [1111 1111] [1000 0000] [0000 0000] [0000 0000])
double var = 0; (8字节 1位符号位,11位指数,52位小数,指数偏移1023)
// 因为通常是little endian,所以通常修改其前后4个字节
UINT* pVar = ((UINT*)&var) + 1;
*(pVar) = 0x7FF00000L;//正无穷
*(pVar) = 0xFFF00000L;//负无穷
常用的浮点数INF&NaN判断方法:
1. Windows中,使用_isnan判断NaN情况;使用!_isnan && !_finite判断INF情况;使用!_finite判断NaN和INF两种情况
_isnan //it returns a nonzero value if the argument x is a NaN;
_finite //It returns 0 if the argument is infinite or a NaN.
2.Linux中,使用insnan和isinf两个函数分别判别两种情况:
isNan
isInf
3.也可自己来写:
int isNaN(double x) {return x != x; }
#define _INF_DEFINE 1.0/0.0
int isInf(double n)
{
static double pinf = 0.0;
static double ninf = 0.0;
if (pinf == 0.0) {
pinf = _INF_DEFINE;
ninf = -pinf;
}
return memcmp(&n, &pinf, sizeof(n)) == 0
|| memcmp(&n, &ninf, sizeof(n)) == 0;
}
依据:
1. NaN是唯一与自身不等的浮点数类型,所以IsNan可以用 x != x来判断。Anything compared with NAN is false, so NAN == NAN is false.
2. INF阶码全1,尾数全0
还有一种借用isNan定义INF的方法
int isInf(double x) {return !isNaN(x) && isnan(x-x);}
依据:
1. Inf – Inf得到的为NaN
转自:https://blog.csdn.net/chunyexiyu/article/details/39179735
浮点数NaN和INF(#IND, #INF)的更多相关文章
- C语言中的nan和inf使用
本文总结nan和inf在C语言当中的含义.产生和判定方法. C语言当中的nan 表示not a number,等同于 #IND:indeterminate (windows) 产生: 对浮点数进行了未 ...
- python将nan, inf转为特定的数字
最近,处理两个矩阵的点除,得到结果后,再作其他的计算,发现有些内置的函数不work:查看得到的数据,发现有很多nan和inf,导致python的基本函数运行不了,这是因为在除的过程中分母出现0的缘故. ...
- Python中的inf与nan
Python中可以用如下方式表示正负无穷 >>> float('inf') # 正无穷,inf不区分大小写,float('InF')一样可以. inf >>> fl ...
- python的正负无穷float("inf")的用法
今天,在看书的时候看到这么一个例子: 这是用来求解 从某个数字列表中找出俩个彼此最接近但是不相等的数(俩者之间的绝对差是最小的): >>> from random import ra ...
- Python 关于正负无穷float(‘inf’)的一些用法
Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...
- 笔记-python-float(‘inf’)
笔记-python-float(‘inf’) 看算法时发现了flaot(‘inf’). Python中可以用如下方式表示正负无穷: float("inf"), float(&quo ...
- 正负无穷float('inf')的一些用法
Python中可以用如下方式表示正负无穷: float("inf"), float("-inf") 利用 inf 做简单加.乘算术运算仍会得到 inf > ...
- Inno setup 安装*.inf文件_示例
nno setup 调用*.Inf文件的条目区段名称_示例 首先自己编写一个INF文件来供 Inno setup 进行测试: ;复制以下代码到记事本然后另存为123.inf .然后把123.inf文件 ...
- INF文件
百度百科:http://baike.baidu.com/view/637107.htm?fr=ala0_1_1 INF简介 INF是Device INFormation File的英文缩写,是Micr ...
随机推荐
- time 与 data time
>>> import datetime>>> datetime.datetime.now()datetime.datetime(2018, 5, 30, 15, 3 ...
- 通过 FastAdmin 理解开源软件
通过 FastAdmin 理解开源软件 开源软件 ≠ 免费软件,免费是遵循其开源协议下的一个特性. 开源软件虽然免费,但服务是可以收费的,因为房子要钱. 开源的目的是为了用户更自由. 做开源每天会遇到 ...
- php 正则学习取反符号~
php 正则学习取反符号~ ~(<a .*?>.*?</a>|<.*?>)~i 先看正则图形,有点偏差,但可以初步看出结果. 关于 ~ 是取反符号,看下面说明.
- Java练习 SDUT-2787_加密术
加密术 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 加密技术是一种常用的安全保密手段,利用加密技术可以把重要的数据变 ...
- POJ-3616_Milking Time
Milking Time Time Limit: 1000MS Memory Limit: 65536K Description Bessie is such a hard-working cow. ...
- SDUT-2120_数据结构实验之链表五:单链表的拆分
数据结构实验之链表五:单链表的拆分 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 输入N个整数顺序建立一个单链表,将该 ...
- 云原生生态周报 Vol. 5 | etcd性能知多少
业界要闻 1 Azure Red Hat OpenShift已经GA.在刚刚结束的Red Hat Summit 2019上,Azure Red Hat OpenShift正式宣布GA,这是一个微软和红 ...
- Remove Extra One 权值线段树
最近疯狂练习线段树... 这道题题意很简单,在1-n中,找寻一个数,使得去掉这个数后,对于每个位置中满足 1<=j<i && a[ j ]<a[ i ] 的位置尽可能 ...
- ORA-01089: 即時シャットダウン処理中 - 操作はできません
一:当时的情景 SQL> shutdown immediate --无任何返回结果 二:问题定位过程 1.查询相关进程只有ORACLE的关键进程存在 ps -ef |grep ora_ soad ...
- @codeforces - 1186F@ Vus the Cossack and a Graph
目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定一个 n 点 m 边的图(n, m<=10^6),记第 ...