非常教程

Python参考手册

运行 | Runtime

fpectl

注意

fpectl模块不是默认生成的,其使用不受鼓励,并且除专家之外可能是危险的。有关更多详细信息,另请参阅限制和其他限制条件部分。

大多数计算机按照所谓的IEEE-754标准执行浮点运算。在任何实际的计算机上,某些浮点运算产生的结果不能表示为正常的浮点值。例如,尝试

>>> import math
>>> math.exp(1000)
inf
>>> math.exp(1000) / math.exp(1000)
nan

(上面的例子可以在很多平台上工作,DEC Alpha可能是一个例外。)“Inf”是IEEE-754中一个特殊的非数字值,代表“无穷大”,“nan”代表“不是数字。 “请注意,除了非数字结果之外,当您要求Python执行这些计算时,没有什么特别的事情发生。这实际上是IEEE-754标准中规定的默认行为,如果它适用于您,请立即停止阅读。

在某些情况下,在发生错误操作的地方提出异常并停止处理会更好。 fpectl模块用于这种情况。 它提供了对来自多个硬件制造商的浮点单元的控制,允许用户在发生任何IEEE-754异常除零,溢出或无效操作时开启SIGFPE生成。 与包含python系统的C代码中插入的一对包装宏一起,SIGFPE被捕获并转换为Python FloatingPointError异常

fpectl模块定义了以下功能并可能引发给定的异常情况:

fpectl.turnon_sigfpe()

打开SIGFPE的生成,并设置合适的信号处理程序。

fpectl.turnoff_sigfpe()

重置浮点异常的默认处理。

exception fpectl.FloatingPointError

turnon_sigfpe()执行完之后,一个浮点操作会引发IEEE-754异常部分中的一个被Zero,Overflow或Invalid操作,然后引发这个标准的Python异常。

1.例子

以下示例演示如何启动和测试fpectl模块的操作。

>>> import fpectl
>>> import fpetest
>>> fpectl.turnon_sigfpe()
>>> fpetest.test()
overflow        PASS
FloatingPointError: Overflow

div by 0        PASS
FloatingPointError: Division by zero
  [ more output from test elided ]
>>> import math
>>> math.exp(1000)
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
FloatingPointError: in math_1

2.限制和其他考虑

设置给定的处理器来捕捉IEEE-754浮点错误当前需要在每个体系结构的基础上定制代码。您可能需要修改fpectl以控制您的特定硬件。

将IEEE-754异常转换为Python异常要求将包装器宏PyFPE_START_PROTECT和PyFPE_END_PROTECT以适当的方式插入到您的代码中。 Python本身已被修改为支持fpectl模块,但数值分析师感兴趣的许多其他代码没有。

fpectl模块不是线程安全的。

扩展内容

源代码分发中的一些文件可能对了解更多关于这个模块如何操作的内容感兴趣。包含文件Include / pyfpe.h在一定程度上讨论了该模块的实现。Modules / fpetestmodule.c给出了几个使用的例子。Objects / floatobject.c中可以找到许多其他示例。

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法