无穷大与 NaN

问题

你想创建或测试正无穷、负无穷或 NaN(非数字) 的浮点数。

解法

Python 并没有特殊的语法来表示这些特殊的浮点值,但是可以使用 float() 来创建它们。比如:

>>> a = float('inf')
>>> b = float('-inf')
>>> c = float('nan')
>>> a
inf
>>> b
-inf
>>> c
nan
>>>

为了测试这些值的存在,使用 math.isinf() 和 math.isnan() 函数。比如:

>>> math.isinf(a)
True
>>> math.isnan(c)
True
>>>

讨论

想了解更多这些特殊浮点值的信息,可以参考 IEEE 754 规范。然而,也有一些地方需要你特别注意,特别是跟比较和操作符相关的时候。

无穷大数在执行数学计算的时候会传播,比如:

>>> a = float('inf')
>>> a + 45
inf
>>> a * 10
inf
>>> 10 / a
0.0
>>>

但是有些操作时未定义的并会返回一个 NaN 结果。比如:

>>> a = float('inf')
>>> a/a
nan
>>> b = float('-inf')
>>> a + b
nan
>>>

NaN 值会在所有操作中传播,而不会产生异常。比如:

>>> c = float('nan')
>>> c + 23
nan
>>> c / 2
nan
>>> c * 2
nan
>>> math.sqrt(c)
nan
>>>

NaN 值的一个特别的地方时它们之间的比较操作总是返回 False。比如:

>>> c = float('nan')
>>> d = float('nan')
>>> c == d
False
>>> c is d
False
>>>

由于这个原因,测试一个 NaN 值得唯一安全的方法就是使用 math.isnan() ,也就是上面演示的那样。

有时候程序员想改变 Python 默认行为,在返回无穷大或 NaN 结果的操作中抛出异常。 fpectl 模块可以用来改变这种行为,但是它在标准的 Python 构建中并没有被
启用,它是平台相关的,并且针对的是专家级程序员。

《Python Cookbook 3rd》笔记(3.7):无穷大与 NaN相关推荐

  1. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  2. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  3. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  4. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  5. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  6. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

  7. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  8. 《Python cookbook》笔记一

    <Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...

  9. 《Python Cookbook 3rd》笔记(5.21):序列化 Python 对象

    序列化 Python 对象 问题 你需要将一个 Python 对象序列化为一个字节流,以便将它保存到一个文件.存储到数据库或者通过网络传输它. 解法 对于序列化最普遍的做法就是使用 pickle 模块 ...

最新文章

  1. torch.nn.softmax()
  2. thinkphp5 图片压缩旋转_PPT图片超多,如何让排版更精致?
  3. 盘点那些世间顶级直男hhhhhh | 今日最佳
  4. 常用开发环境搭建配置教程(OneStall)
  5. Pandas入门2(DataFunctions+Maps+groupby+sort_values)
  6. 简单几招优化你的Go程序
  7. MTK驱动(46)---- Android CPU频率设置(MTK平台)
  8. Matlab Tricks(三)—— subplot 的组织
  9. php 循环 post,如何在php中使用jQuery递归调用POST循环请求
  10. Matlab学习:读取excel中数据
  11. php网页qq客服代码,qq客服代码,网页QQ在线客服代码
  12. PID控制算法原理学习
  13. python sklearn包中的主成分分析_九、Sklearn主成分分析
  14. 北航计算机博士后,北京航空航天大学博士后待遇
  15. 如何在win10下安装Docker
  16. CI框架去掉index.php以及解决No input file specified问题
  17. Linux文件许可权764意味着,chmod 777意味着什么
  18. js验证组织机构代码
  19. 浅谈2019互联网新技术
  20. 【Gated Context Aggregation Network for Image Dehazing and Deraining用于图像去雾和去雨的门控上下文聚合网络】,个人笔记,勿喷

热门文章

  1. 获得系统中某个进程的cpu使用率
  2. 表格数字乘以百分比怎么算_EXCEL记住这两个快捷键,1秒种设好数字格式
  3. python网络爬虫_Python爬虫实战之网络小说
  4. arcgis报错常用解决方法
  5. 【转】解密Qt安装目录的结构
  6. 【转】肺小结节就诊指南:4种CT的区别及如何选择?
  7. Sharepoin学习笔记—架构系列--01 Sharepoint的网页(Page),网页解析(Parsing)与解析安全处理(Security)
  8. 第十一节:WebApi的版本管理的几种方式
  9. easyexcel将对象处理为多列,自增序列
  10. REVERSE-PRACTICE-BUUCTF-30