C、C++中出现nan、inf原因

2023-10-26

在数据处理输入输出时,极有可能遇到数据读入空值(极大、极小)、运算中分母为0或0.0,对0取对数等操作,这将产生nan或inf的产生。这篇博文旨在分析C/C++产生nan和inf的操作及判断是否有nan或inf产生。

NAN的产生原因

nan: not a number,表示“无效数字”。

  • 1、对负数开方,如:−1.0‾‾‾‾‾√;
  • 2、对负数求对数,如:log(−1.0);
  • 3、0.0 / 0.0;
  • 4、0.0 * inf;
  • 5、inf / inf;
  • 6、nf-inf这些操作都会得到nan。
    (0 / 0会产生操作异常;0.0 / 0.0不会产生操作异常,而是会得到nan);

注意:nan是无序的(unordered),无法对其进行逻辑运算。它不大于、小于或等于任何数(包括它自己),将<,>,<=,和>=作用于nan产生一个exception。得到nan时就查看是否有非法操作,如果表达式中含有nan,那么表达式的结果为nan。

INF的产生原因

INF:infinite,表示“无穷大”。
超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。

注意:+inf大于任何数(除了它自己和nan),-inf小于任何数(除了它自己和nan),得到inf时就查看是否有溢出或者除以0。inf在C语言表达式中就表示数学里无限的概念,如1.0/inf等于0.0,并可以与其他浮点数进行比较的(可以参与<=、>+、==、!=等运算)。

nan和inf的判断

下面几个宏即包含在math.h头文件,可用于判断一个表达式的结果是否为inf、nan或其他。使用时包括include<math.h>。

int isfinite(x);
int isnormal(x);
int isnan(x);
int isinf(x);

使用方法,及结果:

    int isfinite(x) ,判断x是否有限,是返回1,其它返回0;
    int isnormal(x),判断x是否为一个数(非inf或nan),是返回1,其它返回0;
    int isnan(x),当x时nan返回1,其它返回0;
    int isinf(x) ,当x是正无穷是返回1,当x是负无穷时返回-1,其它返回0。有些编译器不区分。

测试

产生nan或inf的操作,使用库函数(宏)判断,直接参考原文。

原文:https://blog.csdn.net/wokaowokaowokao12345/article/details/72846436/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C、C++中出现nan、inf原因 的相关文章

随机推荐

  • centos7 arm内核配置yum源

    yum配置文件替换 一 cd到目录 etc yum repos d 创建 替换下面三个文件 1 CentOS Base repo CentOS Base repo The mirror system uses the connecting
  • Java中常用API和标准类的使用与优化

    目录 一 API和Java API简介 二 Object类的重要性 三 Objects工具类的使用 四 标准类的设计与使用 五 String类的特点和常用方法 六 API查找文档及其方法和技巧 一 API和Java API简介 API是Ap
  • 鸿蒙系统应用开发初体验(一)

    上学时期就对操作系统非常有兴趣 甚至还想自己动手尝试尝试 曾买来一堆关于操作系统的书籍肯 这不 翻出来几年前的博客 动手写简单的嵌入式操作系统https blog csdn net yyz 1987 article details 9901
  • VirtualBox虚拟机安装CentOS7.6后无法ssh远程连接虚拟机

    问题如题所述 安装完 一般都是使用ip addr查看虚拟机IP后通过远程工具来尝试连接 虚拟机IP 然后会发现通过此IP无法连接 解决办法 修改VirtualBox的网络配置 1 查看VirtualBox对应网卡的IP地址 对应的IP为19
  • 【数组】点菜题目描述小木呆去食堂吃中饭,食堂提供的菜比较丰富有n(0<n<=1000)种,各种菜都有一个价格ci(ci>0并且都是整数),但他口袋里只剩下m元钱,他计划买两个不同的菜,请问他有多少

    数组 点菜 题目描述 小木呆去食堂吃中饭 食堂提供的菜比较丰富有n 0
  • MySql修改表名的两种方法

    一 rename rename table 旧表名 to 新表名 rename table mysu to new su 二 alter alter table 旧表名 rename as 新表名 alter table mysu rena
  • Python Crypto.Cipher加密包

    The Crypto Cipher package contains algorithms for protecting the confidentiality of data Crypto Cipher包含保护机密数据的加密算法 Inst
  • copy()及copy.deepcopy()

    在说浅拷贝和深拷贝之前先咱们先看看这张图片 A 1 2 3 4 5 6 B A B 0 S print B print A 可以看到只是修改了B中的值但A中的值也随之改变 可以直接推断出A B的存储位置都在同一个地方 现在上浅拷贝 浅拷贝和
  • pnpm install 安装依赖失败

    在使用 pnpm install pnpm i 遇到了一个报错 在使用 EPERM operation not permitted unlink E pnpm store v3 files 9e 经过咨询和查询 得到解决方案是 键盘 win
  • python-pptx处理替换文本

    python中使用python ppt库操作ppt来替换文本内容 包括图片在前方的 from pptx import Presentation from pptx enum shapes import MSO SHAPE TYPE def
  • Whitted光线追踪

    更详细的内容可以看知乎的这篇文章 这里简要的说了一下几何光学的规则 这里引出了光线追踪 正向 从光源开始 和反向 从眼睛开始 在介绍光线追踪前 先来看一些比较简单的 W h i t t e d
  • 面试题.17.07.婴儿名字--并查集

    LeetCode 面试题 17 07 婴儿名字 每年 政府都会公布一万个最常见的婴儿名字和它们出现的频率 也就是同名婴儿的数量 有些名字有多种拼法 例如 John 和 Jon 本质上是相同的名字 但被当成了两个名字公布出来 给定两个列表 一
  • 二、MySQL底层存储原理与结构

    1 前言 本章目标 了解构成MySQL数据库和InnoDB存储引擎的各种类型的文件 理解InnoDB存储引擎的内存结构和磁盘结构 2 文件 MySQL数据库和InnoDB存储引擎的文件有参数文件 日志文件 socket文件 pid文件 表结
  • js逆向技巧(三)

    js伪造原理 js逆向的原理的就是在本地 脱离浏览器的情况下 有着js引擎里面运行 js代码 因为浏览器是 js引擎 BOM DOM这里面有着一些内置方法 所以要想在本地 只有js引擎的情况下运行js代码 对于简单的网站 你可能只扣取 js
  • python从入门到放弃(一)

    python解释器的环境搭建 上一篇简单介绍了一下pythonpython该如何使用呢 专业点说我们需要下载一个python解释器 简单点说就是下个python 首先呢 找到python官网点这儿 进去以后点下载 电脑已经装过3 7 所以这
  • 少儿编程入门应该从机器人Scratch编程开始

    人工智能时代到来 家长们渐渐感知编程对孩子们学习的重要性 那么到底让孩子学习那种编程语言呢 下面就和南京小码王少儿编程培训机构一起来看看吧 很多家长都在为孩子们规划编程学习 在种类繁多的编程语言面前 大人和孩子都犯了难 应该从何起步 学Py
  • Linux上 Mongodb6.0及以上的版本没有mongo命令解决方案

    首先 自行下载 Linux版本mongodb的tgz 当启动服务时 mongod f mongodb conf mongod config mongodb conf 进入数据库 mongocd 6 0之前的版本才有这个命令 如果在这里使用
  • C++OpenCV(1):安装与配置

    文章首发于我的个人博客 欢迎大佬们来逛逛 OpenCV项目地址及源代码 点击这里 文章目录 下载与配置项目环境 最简单的opencv项目 下载与配置项目环境 点击下方连接进入官网下载 Releases 选择合适的版本 直接下载即可 下载完成
  • Kubernetes 网络排错“狂飙”级指南,运维请收好

    本文将引入一个思路 在 Kubernetes 集群发生网络异常时如何排查 文章将引入 Kubernetes 集群中网络排查的思路 包含网络异常模型 常用工具 并且提出一些案例以供学习 1 Pod 网络异常 网络异常大概分为如下几类 网络不可
  • C、C++中出现nan、inf原因

    在数据处理输入输出时 极有可能遇到数据读入空值 极大 极小 运算中分母为0或0 0 对0取对数等操作 这将产生nan或inf的产生 这篇博文旨在分析C C 产生nan和inf的操作及判断是否有nan或inf产生 NAN的产生原因 nan n