Double类型出现的nan问题

您所在的位置:网站首页 double输出时 Double类型出现的nan问题

Double类型出现的nan问题

2024-07-15 03:09| 来源: 网络整理| 查看: 265

最近在调查问题的时候,发现了一个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