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

Double类型出现的nan问题相关推荐

  1. Java中比较两个Double类型数据的大小

    在java中int类型比较可以用"==",而double类型的数据不能用"= ="比较,否则得到永不相等的结果. 一般可以Double的doubleToLong ...

  2. double类型的两个数可以直接比较吗?

    原文链接: double类型(浮点数)是否相等的判断方法_haikuotiankongdong的博客-CSDN博客_double比较是否相等 · 举个例子: double a1 = 2.11; dou ...

  3. Java8的Stream中的Collectors操作求double类型和的坑

    Java8的Stream中的Collectors操作求double类型和的坑 无敌踩坑王的我又双叒叕来了!!!!!! 例子: @Testpublic void testSumDouble() {dou ...

  4. Java中的double类型数据存储探析

    一.double类型的存储表示 Java的浮点类型表示完全按照IEEE754标准(Standards of IEEE 754 floating point numbers),有兴趣可以上IEEE标准网 ...

  5. java double转换符_java中字符串怎么转换成double类型

    展开全部 public class Demo { public static void main(String[] args) { Demo demo = new Demo(); String str ...

  6. java中double类型精度丢失问题及解决方法

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源: https://blog.csdn.net/yacolsp ...

  7. double类型数值计算出现误差的解决办法

    因为公司做的项目几乎都跟金钱.货币有关,所以对数字精确度有相当高的要求,而在开发和维护的时候自然经常会涉及到数值的计算. 但是在测试人员测数值的时候数值跟客户提供的数据比对又总是有差异,基本都是±1块 ...

  8. 转载——C语言中float,double类型,在内存中的结构(存储方式)

    最近在做一个数据格式分析和转换的项目,第一次接触底层的二进制代码存储,看的一头雾水,看到这个帖子后对于在Windows系统下数据的存储方式有了更多的了解,将原文分享一下: 原文地址为http://ww ...

  9. double类型怎么取余_数据类型和运算符

    数据类型和运算符 1.进制 1.1文件存储单位 ​ 任何数据在计算机中都是以二进制的形式存在的,二进制早期由电信号开关演变而来 . ​ 一个电信号或者一个二进制位统称为Bit位,8个Bit位为一组组成 ...

最新文章

  1. SDNU 1464.最大最小公倍数(思维)
  2. 【OpenCV】直方图应用:直方图均衡化,直方图匹配,对比直方图
  3. 三年级计算机课画曲线,三年级上册信息技术曲线工具教案
  4. 罗小黑用flash做的_中影星美好看罗小黑战记正式定档!
  5. 深度残差收缩网络:(二)整体思路
  6. 盘点我们最容易误解的30个英语句子
  7. IRF配置(LACP MAD检测方式)
  8. 在线作图p图|图片生成|做图HTML源码
  9. 专业计算机怎么关机,Win10如何使用快捷键来关机?_win10专业版技巧
  10. 在 Windows 下关闭135/139/445端口的图文方法
  11. 图像工作回顾之五:视频检索
  12. 拼多多关键搜索、商品列表接口、商品详情接口
  13. 薛之谦丨当初不以他盛名而来,如今也不会因为诋毁而离开
  14. 配置MacTex的Tex Live Utility
  15. addon游戏_MOD Herobrine Addon
  16. hp服务器通过ilo5安装系统,HPE ProLiant Gen10 通过iLO 5(v1.15) web界面多种方式更新服务器固件,包含升级系统恢复集方法...
  17. PMP学习笔记:采购合同类型
  18. 信息安全专家李钊博士:信息物理系统安全措施
  19. 关于Tomcat调用Weblogic容器Ejb T3协议
  20. centos7云主机nginx+WordPress完整建站流程记录

热门文章

  1. 家庭智能插座 —Homekit智能
  2. 1042: 【入门】求1992个1992的乘积的末两位数是多少
  3. Git如何将代码回退到一个历史的版本
  4. .Net Core 部署IIS,最细步骤
  5. 关于mac系统怎么找启动台?
  6. 微信中安卓手机点击链接强制跳转默认浏览器打开指定网页
  7. 如何星标(置顶)「芋道源码」
  8. 2018程序员如何找私活
  9. Mac编译Aria2突破线程限制兼顾开机启动
  10. 服务器遭受攻击的方式,如何抵御攻击?