Double类型出现的nan问题 |
您所在的位置:网站首页 › double输出时 › Double类型出现的nan问题 |
最近在调查问题的时候,发现了一个double类型在打印时出现nan。在解决完后随手记下笔记。 1、什么是nan nan的意思是“Not a Number”,不是一个数值,或者无法表示的数值。 2、为什么会出现nan 主要有一下几点: a. 对负数开方 b. 对负数求对数,如:log(-1.0) c. 0为分母, 如3.0/0.0 d. 未对double类型初始化,使用的时候就是nan 我遇到的就是最后一种,未对double类型初始化,其在内存里的存值就是一个nan, 在之后的计算过程中返回的结果也都是nan。 官方的说法: An uninitialised floating point value could be anything at all; it could hold some representation of NaN (there are a very large number of possible bit patterns that can represent NaN). 比如: double a; //假如a此时在栈空间的存储就是无法表示的数值,其之后的运算结果也为nan double b = a * 0.0; //由于a为nan,b的结果也会为nan 3、nan的判断 可以使用isnan函数检测一个数值是否为nan int isnan(x); //当x时nan返回1,其它返回0; 还可以使用unsigned long long 类型的指针指向double类型变量,打印其在内存的存储数值。 unsigned long long* c = &a; prinf("0x%llx \n",*c); 打印结果为: 0xffffffff0000ffff 此数值会被认为一个无法表示的数值 printf("%lf \n", 0xffffffff0000ffff); 输出结果为 nan |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |