C语言中的nan和inf使用
C语言当中的nan
产生:
对浮点数进行了未定义的操作;
- 对负数开方,对负数求对数,0.0/0.0,0.0*inf、inf/inf、inf-inf这些操作都会得到nan。(0/0会产生操作异常;0.0/0.0不会产生操作异常,而是会得到nan);
- 在GNU中,使用宏:float NAN对浮点数赋值;
判定:
库函数方法:(推荐)
自定义函数:
注意:
- nan是无序的(unordered),它不大于、小于或等于任何数(包括它自己),所以,nan==nan 结果是0或false;另外将<,>,<=,和>=作用于nan产生一个exception;
- 得到nan时就查看是否有非法操作;
- 如果表达式中含有nan,那么表达式的结果为nan;
- 对于NaN的实现有两种方式:signaling NaN 和 quiet NaN。signaling NaN就是抛出异常的方式,因此它不需要定义NaN宏。quiet NaN就是即使在计算出现异常的情况下也不抛出异常从而中断程序的执行、而是将结果表示为一个特殊的值, 因此只有在这种情况下NaN宏才被定义;
C语言当中的inf
产生:
超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);
- 1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;log(0);
- 在C99中,使用宏:float INFINITY对浮点数赋值;
判定:
库函数方法:(推荐)
自定义函数:
注意:
- +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
参考资料:
- 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
C语言中的nan和inf使用的更多相关文章
- C语言中,头文件和源文件的关系(转)
简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句, ...
- C 语言中 setjmp 和 longjmp
在 C 语言中,我们不能使用 goto 语句来跳转到另一个函数中的某个 label 处:但提供了两个函数——setjmp 和 longjmp来完成这种类型的分支跳转.后面我们会看到这两个函数在处理异常 ...
- c语言中的scanf在java中应该怎么表达,Scanner类。
1 java是面向对象的语言 它没有像C语言中的scanf()函数,但是它的类库中有含有scanf功能的函数 2 java.util包下有Scanner类 Scanner类的功能与scanf类似 3 ...
- C语言中do...while(0)的妙用(转载)
转载来自:C语言中do...while(0)的妙用,感谢分享. 在linux内核代码中,经常看到do...while(0)的宏,do...while(0)有很多作用,下面举出几个: 1.避免goto语 ...
- C语言中,定义的含义?声明的含义?它们之间的区别是什么?
在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名 ...
- C++中函数的默认参数和C语言中volatile的学习
1.函数默认参数 1 int func(int a,int b=10) 2 { 3 return a*b; 4 } 5 6 int main() 7 { 8 int c=func(2); 9 cout ...
- C语言中qsort函数用法
C语言中qsort函数用法-示例分析 本文实例汇总介绍了C语言中qsort函数用法,包括针对各种数据类型参数的排序,非常具有实用价值非常具有实用价值. 分享给大家供大家参考.C语言中的qsort ...
- c语言中time相关函数
工作中遇到的函数: int seed = time(NULL); srand(seed); signal(SIGINT, stop); signal(SIGUSR1, sig_usr1); 搜time ...
- C语言中的static 详细分析
转自:http://blog.csdn.net/keyeagle/article/details/6708077/ google了近三页的关于C语言中static的内容,发现可用的信息很少,要么长篇大 ...
随机推荐
- 注册dll文件
1.打开"开始-运行-输入regsvr32 XXX.dll",回车即可 2.win7 64位旗舰版系统运行regsvr32.exe提示版本不兼容 在运行regsvr32.exe的时 ...
- nsq 安装试用
因为是mac 系统安装试用brew install nsq 安装 brew install nsq 组件说明 nsqd 守护进程进行消息的接受,缓存以及传递消息给客户端,需要配置nsqlookupd地 ...
- mysql update 没有where 不能更新的安全保护设置
http://www.cnblogs.com/wjoyxt/p/5620827.html 没有where 不能更新的安全保护设置 http://dev.yesky.com/429/3543292 ...
- settimeout()在IE8下参数无效问题解决方法
遇到这个问题,setTimeout(Scroll(),3000); 这种写法在IE8 下 不能够执行,提示参数无效, setTimeout(function(){Scroll()},3000);这种方 ...
- APN与VPDN的主要区别
VPDN APN 安全性 二次认证,加密 一次认证,没有加密 企业成本 高 低 对GGSN要求 可接受动态配置LNS参数信息,对GGSN性能影响小. 静态配置GRE隧道参数,性能影响较大,部分厂家对G ...
- 02 - Unit010:关联映射
关联映射 什么是? 数据库中有关联关系的表,通过实体对象引用的方式体现出来,叫关联映射. 为什么? 将多表的记录封装成实体对象. 何时用? 对数据库中的表进行多表查询时. 怎么用? cn_user-- ...
- 黄聪:WordPress实现HTML5预加载
WordPress实现HTML5预加载方法很简单,把下面代码: <?php if (is_archive() && ($paged > 1) && ($pa ...
- URL的getFile()和getPath()方法的区别(转)
转自博客:http://blog.csdn.net/l375852247/article/details/7999063 import java.net.MalformedURLException; ...
- ubuntu 下出现E: Sub-process /usr/bin/dpkg returned an error code
在用apt-get安装软件时出现了类似于 install-info: No dir file specified; try –help for more information.dpkg:处理 get ...
- 大白话系列之C#委托与事件讲解(序言)
声明:本系列非原创,因为太精彩才转载,如有侵权请通知删除,原文:http://www.cnblogs.com/wudiwushen/archive/2010/04/20/1698795.html 在讲 ...