Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
常用的数学函数以及浮点数处理函数
在编程中我们总要进行一些数学运算以及数字处理,尤其是浮点数的运算和处理,这篇文章主要介绍C语言下的数学库。而其他语言中的数学库函数的定义以及最终实现也是通过对C数学库的调用来完成的,其内容大同小异,因此就不在这里介绍了。 C语言标准库中的math.h定义了非常多的数学运算和数字处理函数。这些函数大部分都是在C89标准中定义的,而有些C99标准下的函数我会特殊的说明,同时因为不同的编译器下的C标准库中有些函数的定义有差别,我也会分别的说明。
欧阳大哥2013
2018/08/22
2.6K0
常用的数学函数以及浮点数处理函数
C++ std::isnan等函数的使用
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
ccf19881030
2019/10/22
7.1K0
[c语言日寄]浮点数的排序
在C语言的编程实践中,浮点数的排序是一个常见且重要的问题。无论是科学计算、数据分析还是图形处理,我们常常需要对浮点数数组进行排序。然而,浮点数的排序并不像整数排序那样简单直接,因为浮点数的精度问题和特殊值(如NaN和无穷大)需要特别处理。
siy2333
2025/03/17
820
C++/C++11中头文件cmath的使用
<math.h>是C标准函数库中的头文件。在C++中一般用<cmath>。此头文件中声明了一系列函数来计算常见的数学运算和变换:
用户7886150
2021/02/11
8130
python的nan,NaN,NAN
在Python编程中,我们经常遇到表示缺失或无效数据的情况。为了解决这种问题,Python中提供了特殊的浮点数表示:​​nan​​、​​NaN​​和​​NAN​​。这些表示法被广泛应用于数学和科学计算等领域。本文将介绍这三个特殊的浮点数表示,并讨论它们的使用场景和注意事项。
大盘鸡拌面
2023/11/09
1K0
C语言简明数据类型指南
一、常用的数据类型 char:字符在计算机的存储器中以字符编码的形式保存,字符编码是一个数字,因此在计算机看来,A与数字65完全一样(65是A的ASCII码)。 int:如果要保存一个整数,通常可以使用int。不同计算机中的int的大小不同,但至少应该有16位。一般而言,int可以保存几万以内的数字。 short:它通常只有int的一半大小,所以如果只想保存一个几百、几千的数字,可以使用这个数据类型。 long:一般大小是int的两倍,至少应该有32位,所以可以保存几十亿以内的数字;但大部分计算机的long
Zoctopus
2018/06/04
8620
Numpy 常量
NumPy包括几个常量: np.e、np.pi、 np.inf、 np.nan、np.NINF、np.PZERO & np.NZERO、np.euler_gamma、np.newaxis
用户7886150
2021/01/06
9520
⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(float/bool/指针)与“零值“的比较)
x > -DBL_EPSILON && x < DBL_EPSILON: 为何不是>= && <= 呢?
用户9645905
2022/11/30
7870
⭐️ 关键字深度剖析 ⭐️第五章(深入C语言三种类型(float/bool/指针)与“零值“的比较)
平方根的C语言实现(一) —— 浮点数的存储
  曾经做一个硬件成本极度控制的项目,因为硬件成本极低,并且还需要实现较高的精度测量,过程中也自己用C语言实现了正弦、余弦、反正切、平方根等函数。   以下,无论是在我的实际项目中还是本地的计算机系统,int都是4个字节且机器为小端,除非特别提及,否则都如此默认。按理float的存储没有大小端之分,可是的确在powerpc大端上浮点数的存储也一样是和X86/ARM这样的小端机相反。不过因为正好因大小端而决定浮点数的存储顺序,那么本系列贴子里所有的C语言程序至少在powerpc大端上也是效果相同的。   尽管
窗户
2018/02/07
1.4K0
002. java.lang.NumberFormatException: Infinite or NaN,怎么破?
如果你工作超5年,100%遇到过这个异常:java.lang.NumberFormatException: Infinite or NaN
YourBatman
2023/05/31
1.1K0
002. java.lang.NumberFormatException: Infinite or NaN,怎么破?
基础野:细说浮点数
Brief                                 本来只打算理解JS中0.1 + 0.2 == 0.30000000000000004的原因,但发现自己对计算机的数字表示和运算十分陌生,于是只好恶补一下。  本篇我们一起来探讨一下基础——浮点数的表示方式和加减乘除运算。   在深入前有两点我们要明确的:   1. 在同等位数的情况下,浮点数可表示的数值范围比整数的大;   2. 浮点数无法精确表示其数值范围内的所有数值,只能精确表示可用科学计数法m*2e表示的数值而已;     
^_^肥仔John
2018/01/18
2.5K1
基础野:细说浮点数
C语言函数大全--i开头的函数
从指定 I/O 端口读取到的 16 位数据。若读取过程中出现错误,返回值的具体情况可能因系统和硬件而异。
huazie
2025/04/20
900
C语言函数大全--i开头的函数
走进 JDK 之 Float
如果你对这个答案抱有疑问,那么在阅读 Float 源码之前,我们先来看一下 Float 在内存中是如何表示的。
路遥TM
2021/08/31
9550
C语言参考手册pdf
《C语言参考手册(原书第5版)》是C语言的详尽参考手册,分为两部分:第一部分讨论了C语言的所有语言特征,包括词法、预处理机制、声明、类型、表达式、语句以及函数等基本语言特征;第二部分讨论了C语言的标准库,针对它们不同的功能分别进行详细介绍。为了帮助读者理解相关概念,《C语言参考手册(原书第5版)》在讨论C语言及其标准库的细节时,提供了许多实例和解释。第一部分的各章还提供了练习题和主要练习的解答,这些练习可帮助读者加深理解C语言的基本功能和特性。
用户7886150
2021/02/11
2.7K0
【Python】Math--数学函数(详细附解析~)
注意 frexp() 和 modf() 具有与它们的C等价函数不同的调用/返回模式:它们采用单个参数并返回一对值,而不是通过 '输出形参' 返回它们的第二个返回参数(Python中没有这样的东西)。
小言从不摸鱼
2024/09/10
2460
Java 中的变量类型、拆箱装箱及相互间的转换
注意:1字节是8byte,以int为例,范围是[-2^31, 2^31-1],因为存在负数,故指数位要-1,正整数部分存在0,故要-1。0开头表示八进制,0x开头表示十六进制。
matt
2022/10/25
5490
Python3.6.5标准库文档(完整中文版)—内置函数(六)
从构造的那些元件的迭代器可迭代为哪些函数 返回真。 可迭代可以是序列,支持迭代的容器或迭代器。如果函数是None,则假定标识函数,即删除所有可迭代的元素。 注意,如果函数不是且函数是 ,则等价于生成器表达式。filter(function, iterable) (item for item in iterable if function(item)) None (item for item in iterable if item) None
python鱼霸霸
2020/06/22
6230
C语言深度剖析(2)
同一段二进制的编码,让不同的数据类型进行解释(有符号的还是无符号的),就会显示截然不同的结果,因此数据的类型决定了我么如何解释二进制里面的二进制的序列;
阑梦清川
2025/02/24
370
C语言深度剖析(2)
float double取值范围_double float区别
要说清楚Java浮点数的取值范围与其精度,必须先了解浮点数的表示方法,浮点数的结构组成,之所以会有这种所谓的结构,是因为机器只认识01,你想表示小数,你要机器认识小数点这个东西,必须采用某种方法,比如,简单点的,float四个字节,前两个字节表示整数位,后两个字节表示小数位(这就是一种规则标准),这样就组成一个浮点数。而Java中浮点数采用的是IEEE 754标准。
全栈程序员站长
2022/11/03
2K0
Go语言中常见100问题-#19 Not understanding floating points
在Go语言中,有两种浮点数类型(虚数除外):float32和float64. 浮点数是用来解决整数不能表示小数的问题。我们需要知道浮点数算术运算是实数算术运算的近似,下面通过例子说明浮点数运算采用近似值的影响以及如何提高计算精度。
数据小冰
2022/12/18
7230
Go语言中常见100问题-#19 Not understanding floating points
相关推荐
常用的数学函数以及浮点数处理函数
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验