Weibw's World Weibw's World
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Weibw

一个没有梦想的咸鱼
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《Flask》

  • 《Python Cookbook》第三版

    • 第一章:数据结构与算法

    • 第二章:字符串和文本

    • 第三章:数字日期和时间

      • 数字的四舍五入
      • 执行精确的浮点数运算
      • 数字的格式化输出
      • 二八十六进制整数
      • 字节到大整数的打包与解包
      • 复数的数学运算
      • 无穷大与 NaN
        • 问题
        • 解决方案
        • 讨论
      • 分数运算
      • 大型数组运算
      • 矩阵与线性代数运算
      • 随机选择
      • 基本的日期与时间转换
      • 计算上一个周五的日期
      • 计算当前月份的日期范围
      • 字符串转换为日期
      • 结合时区的日期操作
    • 第四章:迭代器与生成器

    • 第五章:文件与IO

    • 第六章:数据编码和处理

    • 第七章:函数

    • 第八章:类与对象

    • 第九章:元编程

    • 第十章:模块与包

    • 第十一章:网络与Web编程

    • 第十二章:并发编程

    • 第十三章:脚本编程与系统管理

    • 第十四章:测试、调试和异常

    • 第十五章:C语言扩展

  • Python基础

  • Python
  • 《Python Cookbook》第三版
  • 第三章:数字日期和时间
weibw
2022-01-06

无穷大与 NaN

# 问题

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

# 解决方案

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

>>> a = float('inf')
>>> b = float('-inf')
>>> c = float('nan')
>>> a
inf
>>> b
-inf
>>> c
nan
>>>
1
2
3
4
5
6
7
8
9
10

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

>>> math.isinf(a)
True
>>> math.isnan(c)
True
>>>
1
2
3
4
5

# 讨论

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

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

>>> a = float('inf')
>>> a + 45
inf
>>> a * 10
inf
>>> 10 / a
0.0
>>>
1
2
3
4
5
6
7
8

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

>>> a = float('inf')
>>> a/a
nan
>>> b = float('-inf')
>>> a + b
nan
>>>
1
2
3
4
5
6
7

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

>>> c = float('nan')
>>> c + 23
nan
>>> c / 2
nan
>>> c * 2
nan
>>> math.sqrt(c)
nan
>>>
1
2
3
4
5
6
7
8
9
10

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

>>> c = float('nan')
>>> d = float('nan')
>>> c == d
False
>>> c is d
False
>>>
1
2
3
4
5
6
7

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

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

编辑 (opens new window)
上次更新: 2023/10/13, 17:39:25
复数的数学运算
分数运算

← 复数的数学运算 分数运算→

最近更新
01
牛客网非技术快速入门SQL练习题
03-08
02
其他日常SQL题
03-07
03
用户与权限管理
03-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 | Weibw | 辽ICP备18015889号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式