在GIS视图上发现部分小区不能正常呈现,通过跟踪异常小区发现其所属基站的经纬度坐标都是-1.#QNAN00000000000无效值,导致小区绘制失败,这些小区均属新入网的3G基站,资源数据还没有维护起来,数据库中对应字段为空,经过TUXEDO接口后数据反映为QNAN无效值。在基础数据完善之前,可在SQL取数据时将空值转化为0,或在接收数据时对此类数据作进一步的过滤。
此处的1.#QNAN是一个打印呈现,QNAN是指Quiet Not a Number,类似的浮点错误还有SNaN(Signaling Not a Number),通常如0.0/0.0、给负数开平方根等溢出或无效运算就会产生一个NAN结果的表示值,NaN及两种浮点错误的说明如下:
The value NaN (Not a Number) is used to represent a value that does not represent a real number. NaN’s are represented by a bit pattern with an exponent of all 1s and a non-zero fraction. There are two categories of NaN: QNaN (Quiet NaN) and SNaN (Signalling NaN).
A QNaN is a NaN with the most significant fraction bit set. QNaN’s propagate freely through most arithmetic operations. These values pop out of an operation when the result is not mathematically defined.
An SNaN is a NaN with the most significant fraction bit clear. It is used to signal an exception when used in operations. SNaN’s can be handy to assign to uninitialized variables to trap premature usage.
Semantically, QNaN’s denote indeterminate operations, while SNaN’s denote invalid operations. If a return value is a QNaN, it means that it is impossible to determine the result of the operation, a SNaN means that the operation is invalid.
这样的特殊浮点数还有INF和IND:INF就是Infinity,表示一个无穷大的数,包括正无穷和负无穷;IND则表示无限小,但不确定。如1.0/0.0会产生一个INF无穷大,-1.0/0.0会产生一个负无穷大。
回到最初的错误上,这种无效数据之所以通过了经纬度有效值判断,是因为常规的浮点范围对这类浮点数无效。我们知道常规的浮点数不能直接判0等于,而如果这个浮点数为NaN,那if (f==f) 会得到false结果。但是利用这个结果来判断一个浮点数是否为NaN并不总是安全的,例如用这个宏定义#define isnan(x) ((x) != (x)) ,在某些编译环境下可能就会脱离了你的预期。那如何判断特殊的浮点数呢?各种语言应该都能找到对应的辅助函数或者类方法,在C语言中,可以用float.h中的int _isnan(double x)、int _finite(double x)、int _fpclass(double x)函数来判断,返回结果代表意义分别为:_FPCLASS_SNAN (Signaling NaN)、_FPCLASS_QNAN (Quiet NaN)、_FPCLASS_NINF (Negative Infinity, –INF)、_FPCLASS_PINF (Positive Infinity, +INF);在C++中,可以用STL中的limits类:numeric_limits::quiet_NaN()、numeric_limits::signaling_NaN()、numeric_limits::infinity()等方法。
更多信息可参考下面的文章:
http://www.ibm.com/developerworks/cn/java/j-jtp0114/
http://steve.hollasch.net/cgindex/coding/ieeefloat.html
http://www.topcoder.com/tc?module=Static&d1=tutorials&d2=integersReals2
相关推荐
从1.#INF、1.#IND到#QNAN:实战中捕获与处理浮点异常的三种策略
本文深入探讨了浮点异常(1.#INF、1.#IND和#QNAN)的捕获与处理策略,通过实战案例展示了这些异常在程序中的破坏性。文章详细介绍了三种基础检测方法(自比较法、C++11标准库工具和位模式检测)以及主动防御策略(编译器选项、运行时控制和自定义包装器),帮助开发者构建有效的异常防火墙,确保数值计算的稳定性和可靠性。
envi的dat文件转为tif,在arcgis中出现-1#、1#,无法显示高低值
1、envi-toolbox-save as ...(envi/tiff)-选择文件-勾选no data(我的文件中为0)-存为envi格式文件(.dat)在envi中可以正常显示值范围,但是dat转为tif后,在arcgis中出现-1#inf和1#inf情况。2、在arcgis中直接小加号+导入dat文件。
Arcgis常用技巧汇总
这时会形成一个新图层,所有的点都添加进来了,但现在添加进来的点由于没有 objectID 或者 FID ,现在图层不具备 *.shp 图层的大部分功能,如点的选择,编辑,关联,属性等操作。Excel 中数据 -> 导入外部数据找到保存的 txt 文件,下一步 -> 选分隔符,再下一步选中 “ 空格和其它 ” 确定(保存的 txt 文件导入 Excel 中),其中 Name 列为坐标点号, Description 列为打点时间,正常情况 Position 列为坐标点,得到了坐标点。然后用于坐标点成面图层。
1.#QNAN、1.#IND和1.#INF等“无效”浮点数说明及其判断
在GIS视图上发现部分小区不能正常呈现,通过跟踪异常小区发现其所属基站的经纬度坐标都是-1.#QNAN00000000000无效值,导致小区绘制失败,这些小区均属新入网的3G基站,资源数据还没有维护起来,数据库中对应字段为空,经过TUXEDO接口后数据反映为QNAN无效值。在基础数据完善之前,可在SQL取数据时将空值转化为0,或在接收数据时对此类数据作进一步的过滤。 此处的1.#QNAN是一
NAN,IND,INF,DEN的概念
1)NAN - Not A Number。意思是不是一个数值。VS调试显示类似”1.#QNAN00000000000“。 产生原因:无意义的算术计算如负数开方。判断方法:包含float.h头文件,调用_isnan()。 2)IND - Indeterminate Number。意思是不确定数值。VS调试显示类似“1.#IND000000000000”。 是NAN的一种特殊情况。产生原因:0除
栅格数据的一些概念和常用处理方法,ArcGIS栅格数据显示错误问题如何解决
栅格数据就是将空间分割成有规律的网格,每一个网格称为一个像元,并在各像元上赋予相应的属性值来表示实体的一种数据形式。空间数据库是对地理栅格数据进行有效管理的一个极为重要的手段。栅格数据的本质就是亮度值矩阵。
浮点数计算常见错误1.#INF, 1.#IND和#QNAN
编程时,可能会从您的代码中产生某些错误条件。如果编译器捕获任何编译错误,它将停止编译并告诉您错误所在位置。编译器还可能会对某些构造发出警告,这些构造可能会或可能不会在运行期间给您带来问题。 以下是您作为程序员在执行浮点算术(任何加法、减法、乘法和除法)时应注意的一些浮点条件,即(QNAN 和 SNAN)条件和错误。 正数 负数 意义 1.#INF -1.#INF Infinity无穷大 1.#SNAN -1.#SNAN Signalling NaN .
浮点数计算溢出处理问题、浮点数1.#INF和1.#IND 问题
文章来自:http://www.cnblogs.com/aqxin/archive/2011/05/20/2052045.html 昨天遇到了一个关于浮点数计算溢出处理的问题,本来想用 if 语句把条件写好。 可是遇到了很多困难,上网搜了一下,发现一个解决办法: if 语句把条件写好可以,但是如果遇到幂函数pow(x,y)时,问题就不那么简单了。仔细分析将发现:
1.#IND 1.#INF nan inf 1.#QNAN SNaN 问题的解决
内容整理自网络 进行浮点数编程时,如果没有注意,常常会出现输出类似 1.#IND, 1.#INF 或者 nan, inf 之类奇怪的输出。这通常隐含了浮点数操作的异常。 特殊浮点数的含义 1.#INF / inf:这个值表示“无穷大 (infinity 的缩写)”,即超出了计算机可以表示的浮点数的最大范围(或者说超过了 double 类型的最大值)。例如,当用 0 除一个整数时便会得
IEEE754标准原文,及浮点数在线转换
原文外网链接 IEEE754.PDF (berkeley.edu)http://people.eecs.berkeley.edu/~wkahan/ieee754status/IEEE754.PDF 百度网盘分享链接 链接:https://pan.baidu.com/s/1KMaDNi04Q0ZzlNkxkONZ9w 提取码:1fwc 一些题外话: 我们常用的编程语言例如C#其采用的float也是采用此标准。 stm32的keil编程也是采用此标准。 有时候我们需要判断一...
C++中的Not a number数据#INF, #NAN, #IND,
http://blogs.msdn.com/b/oldnewthing/archive/2013/02/21/10395734.aspx What does -1.#IND mean?: A survey of how the Visual C runtime library prints special floating point values RATE THIS
1.#INF,-1.#IND,1.#INF000,-…
原文地址:1.#INF,-1.#IND,1.#INF000,-1.#INF000作者:brightforever99 上文中说到的新发现,就是这篇文章的标题。以下是它们的含义: (1)1.#INF: 表示无穷小 (2)-1.#IND: 做除法时除数为0 (3)1.#INF000:正无穷大 (4)-1.#INF000:负无穷大
关于Arcgis这62个常用技巧,你知道几个?
小编推荐:ArcGIS类全领域教程推荐https://mp.weixin.qq.com/s?__biz=MzU0MDQ3MDk3NA==&mid=2247560279&idx=5&sn=8ac52cabeb8c7e3b2c083e07ef6056da&chksm=fb3b1786cc4c9e909bab16dd99e88e5f5f9816eb2349d6d73a68a137a5264aa606b2035d7b3e&token=1674760816&lang=zh_CN#rd一、计算面积 ( 可以帮我们计算
超实用!Arcgis62个常用技巧!
超实用!Arcgis62个常用技巧!
【ArcGIS自定义脚本工具】批量根据矢量文件对应范围的矩形面要素
批量根据现有的要素(点、线、面)矢量文件(.shp)的范围生成扩大范围的矩形边界面要素文件(.shp)。扩大后面要素的坐标系与输入保持一致。输出矢量文件名格式(E_输入文件名.shp) 三、工具参数............
195




被折叠的 条评论
为什么被折叠?



