前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >[C] C语言中的nan和inf使用

[C] C语言中的nan和inf使用

作者头像
轻舞飞扬SR
发布于 2021-02-24 02:50:47
发布于 2021-02-24 02:50:47
3.5K00
代码可运行
举报
文章被收录于专栏:Visual CodexVisual Codex
运行总次数:0
代码可运行

本文总结nan和inf在C语言当中的含义、产生和判定方法。 C语言当中的nan 表示not a number,等同于 #IND:indeterminate (windows) 产生: 对浮点数进行了未定义的操作;

对负数开方,对负数求对数,0.0/0.0,0.0*inf、inf/inf、inf-inf这些操作都会得到nan。(0/0会产生操作异常;0.0/0.0不会产生操作异常,而是会得到nan); 在GNU中,使用宏:float NAN对浮点数赋值; 判定: 库函数方法:(推荐) <见后> 自定义函数: int isNumber(double d){return (dd);}来判断d是否为nan,若d是nan则返回0,否则返回非零值。 注意: nan是无序的(unordered),它不大于、小于或等于任何数(包括它自己),所以,nannan 结果是0或false;另外将<,>,<=,和>=作用于nan产生一个exception; 得到nan时就查看是否有非法操作; 如果表达式中含有nan,那么表达式的结果为nan; 对于NaN的实现有两种方式:signaling NaN 和 quiet NaN。signaling NaN就是抛出异常的方式,因此它不需要定义NaN宏。quiet NaN就是即使在计算出现异常的情况下也不抛出异常从而中断程序的执行、而是将结果表示为一个特殊的值, 因此只有在这种情况下NaN宏才被定义; C语言当中的inf infinity (linux),等同于 #INF:infinity (windows) 产生: 超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);

1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;log(0); 在C99中,使用宏:float INFINITY对浮点数赋值; 判定: 库函数方法:(推荐) <见后> 自定义函数: int isFiniteNumber(double d) {return (d<=DBL_MAX&&d>=-DBL_MAX);} 来判断d是否为一个finite数(既不是inf,又不是nan(加入d为nan,则d参加比较就会得到false(0)值))。 注意: +inf大于任何数(除了它自己和nan);-inf小于任何数(除了它自己和nan); 得到inf时就查看是否有溢出或者除以0; 头文件<float.h>中,有定义的常量DBL_MAX,这个常量表示“能表示出来的最大的双精度浮点型数值”。<float.h>中还有常量DBL_MIN,DBL_MIN表示可以用规格化表示的最小的正浮点数,但DBL_MIN并不是最小的正浮点数,因为可以用可以用非规格化浮点数表示的更小; inf在C语言表达式中就表示数学里无限的概念,如1.0/inf等于0.0,并可以与其他浮点数进行比较的(可以参与<=、>+、==、!=等运算); 库函数方法判定inf和nan 下面这几个宏(用宏实现的,使用时跟函数的形式基本相同)是判断一个表达式的结果是否为inf、nan或其他:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 头文件:include<math.h>
 宏的用法(类似于函数原型):int fpclassify(x);
                             int isfinite(x);
                             int isnormal(x);
                             int isnan(x);
                             int isinf(x);
 具体用法:
      1、int fpclassify(x)

用来查看浮点数x的情况,fpclassify可以用任何浮点数表达式作为参数,fpclassify的返回值有以下几种情况。 FP_NAN:x是一个“not a number”。 FP_INFINITE: x是正、负无穷。 FP_ZERO: x是0。 FP_SUBNORMAL: x太小,以至于不能用浮点数的规格化形式表示。 FP_NORMAL: x是一个正常的浮点数(不是以上结果中的任何一种)。 2、int isfinite(x)     当(fpclassify(x)!=FP_NAN&&fpclassify(x)!=FP_INFINITE)时,此宏得到一个非零值。 3、int isnormal(x) 当(fpclassify(x)==FP_NORMAL)时,此宏得到一个非零值。 4、int isnan(x) 当(fpclassify(x)==FP_NAN)时,此宏返回一个非零值。 5、int isinf(x)     当x是正无穷是返回1,当x是负无穷时返回-1。(有些较早的编译器版本中,无论是正无穷还是负无穷,都返回非零值,不区分正负无穷)。 参考资料: C语言 inf和nan(http://blog.sina.com.cn/s/blog_8b745a5f01014ifk.html) 20.5.2 Infinity and NaN(http://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html) http://bbs.csdn.net/topics/70279090

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/09/11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java空指针异常处理:判空、Optional与Assert解析
在Java编程中,空指针异常(NullPointerException)是最常见的运行时错误之一。本文将深入探讨三种处理空指针异常的方法:传统的判空检查、Java 8引入的Optional类以及使用断言(Assert)。通过代码示例和应用场景分析,帮助开发者理解并选择最适合的方案以提升程序健壮性。
Yeats_Liao
2024/12/27
3700
Java空指针异常处理:判空、Optional与Assert解析
万恶的空指针Java8怎么处理的?一文让你减少空指针的出现
​ 到目前为止,臭名昭著的空指针异常是导致Java应用程序失败的最常见原因。 以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类, Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代 码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。
冷环渊
2021/12/14
7820
Java自动拆箱空指针异常,救火队员上线
公司搬迁,临时充当装修工,提前两个小时到公司忙着拆卸设备。结果接到客户反映,某部分功能偶尔不能用。于是参与救火,与写这段代码的小伙伴一起排查原因。
程序新视界
2021/03/20
1.5K0
【小家java】java8新特性之---Optional的使用,避免空指针,代替三目运算符
空指针异常是导致Java应用程序失败的最常见原因。以前,为了解决空指针异常,Google公司著名的Guava项目引入了Optional类,Guava通过使用检查空值的方式来防止代码污染,它鼓励程序员写更干净的代码。受到Google Guava的启发,Optional类已经成为Java 8类库的一部分。Optional实际上是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,使得我们就不用显式进行空值检测
YourBatman
2019/09/03
2.6K0
如何在 Java8 中风骚走位避开空指针异常
要说 Java 编程中哪个异常是你印象最深刻的,那 NullPointerException 空指针可以说是臭名昭著的。不要说初级程序员会碰到,即使是中级,专家级程序员稍不留神,就会掉入这个坑里。
JAVA葵花宝典
2019/08/09
8190
如何在 Java8 中风骚走位避开空指针异常
如何在 Java8 中风骚走位避开空指针异常
要说 Java 编程中哪个异常是你印象最深刻的,那 NullPointerException 空指针可以说是臭名昭著的。不要说初级程序员会碰到,即使是中级,专家级程序员稍不留神,就会掉入这个坑里。
Java技术江湖
2019/09/24
7730
如何在 Java8 中风骚走位避开空指针异常
花式踩坑Java空指针和避坑的正确姿势
最大的问题是,我们写代码时很多空指针的情况并不是直接发生的,而是被“传递”过来的,导致没有留意。
明明如月学长
2021/08/31
7870
花式踩坑Java空指针和避坑的正确姿势
开发中造成空指针的常见写法,如何预防!
反例:public int f () { return Integer 对象}, 如果为 null,自动解箱抛 NPE。
小熊学Java
2023/07/16
7090
开发中造成空指针的常见写法,如何预防!
别再写 bug 了,避免空指针的 5 个案例!
空指针是我们 Java 开发人员经常遇到的一个基本异常,这是一个极其普遍但似乎又无法根治的问题。
Java技术栈
2019/07/07
8440
【Rust 基础篇】Rust Option 类型详解
在 Rust 中,Option 类型是一种用于处理可能为空的值的枚举类型。它提供了一种安全且优雅的方式来处理可能存在或不存在的值,避免了空指针异常的问题。本篇博客将详细介绍 Rust 中的 Option 类型,包括定义、常用方法和使用示例。
繁依Fanyi
2023/10/12
7680
java中空指针异常情况以及解决办法
out.println(request.getParameter("username"));
用户7886150
2020/12/18
1.9K0
Rust避坑现代C++悬垂指针
C++是一门应用广泛的编程语言。在2023年JetBrains全球开发者生态问卷调查中,C++在受访程序员过去一年中的使用率,占25%,紧跟JavaScript、Python和Java之后。在本书撰写时,根据JetBrains的统计,程序员使用最多的是C++17。
程序员吾真本
2024/09/18
6522
Rust避坑现代C++悬垂指针
还只会 null != obj 判空,10招让你彻底告别空指针异常!
NPE异常相信 Java 程序员都很熟悉,是 NullPointerException 的缩写;最近业务需求开发的有点着急,测试环境就时不时的来个NPE异常,特别的头疼;作为出镜率最高的异常之一,一旦入行 Java 开发,可以说它将伴随着你整个职业生涯;不管是新手小白、还是老司机,对NPE异常那是又“爱”又狠,爱的主要原因是处理起来简单,恨当然是一个不小心就会踩坑;为了提高代码的质量,NPE异常是必须要消灭掉的;
一行Java
2023/09/04
9990
还只会 null != obj 判空,10招让你彻底告别空指针异常!
java空指针报错_空指针异常是什么意思
Java 中任何对象都有可能为空,当我们调用空对象的方法时就会抛出 NullPointerException 空指针异常,这是一种非常常见的错误类型。我们可以使用若干种方法来避免产生这类异常,使得我们的代码更为健壮。本文将列举这些解决方案,包括传统的空值检测、编程规范、以及使用现代 Java 语言引入的各类工具来作为辅助。
全栈程序员站长
2022/11/17
2.3K0
java空指针报错_空指针异常是什么意思
Rust入坑指南:亡羊补牢
对于类型系统,熟悉Java的同学应该比较清楚。例如我们给一个接收参数为int的函数传入了字符串类型的变量。这是由编译器帮我们处理的。
Jackeyzhe
2020/03/10
8800
解决Java开发中的异常:空指针异常(NullPointerException)
在Java开发中,空指针异常(NullPointerException)是一种常见而又令人头痛的问题。当我们试图访问一个空对象的属性或调用空对象的方法时,就会触发空指针异常。在本文中,我们将探讨空指针异常的原因、如何避免它以及解决这一问题的最佳实践。
很酷的站长
2024/01/01
5.9K0
解决Java开发中的异常:空指针异常(NullPointerException)
Java如何有效避免空指针
hello,伙伴们,shigen又来了,这篇稿子是周末的时候写出来的。今天的话题是:《Java如何有效的避免空指针》。
shigen
2023/11/29
2270
Java如何有效避免空指针
Java8新特性之空指针异常的克星Optional类
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
程序新视界
2019/10/22
1.4K0
【Java8新特性】Optional类在处理空值判断场景的应用 回避空指针异常
空值异常是应用运行时常见的异常,传统方式为了编写健壮的应用,常常使用多层嵌套逻辑判断回避空指针异常。Java8新特性之Optional为此类问题提供了优雅的解决方式。
赛先生和泰先生
2022/02/24
1.5K0
【Java8新特性】Optional类在处理空值判断场景的应用 回避空指针异常
Java函数式开发——优雅的Optional空指针处理
    在Java江湖流传着这样一个传说:直到真正了解了空指针异常,才能算一名合格的Java开发人员。在我们逼格闪闪的java码字符生涯中,每天都会遇到各种null的处理,像下面这样的代码可能我们每天都在反复编写:
随风溜达的向日葵
2018/08/15
7490
推荐阅读
相关推荐
Java空指针异常处理:判空、Optional与Assert解析
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验