Python math.nextafter() 函数
在浮点数计算中,了解相邻浮点数之间的关系非常重要。计算机中的浮点数是离散的,相邻两个浮点数之间有一个最小的间隔。
math.nextafter() 是 Python 3.9 引入的函数,用于返回从 x 朝 y 方向前进指定浮点步数后的值。
单词释义: nextafter 意为"下一个之后"。
基本语法与参数
语法格式
import math math.nextafter(x, y[, steps])
参数说明
- x: 起始浮点数
- y: 目标方向
- steps(可选): 步数,默认为 1
返回值
返回从 x 沿 y 方向前进 steps 步后的浮点数
实例
示例 1:获取相邻浮点数
实例
import math
next_val = math.nextafter(1.0, math.inf)
print(f"1.0 的下一个浮点数: {next_val}")
print(f"差值: {next_val - 1.0}")
prev_val = math.nextafter(1.0, -math.inf)
print(f"\n1.0 的前一个浮点数: {prev_val}")
print(f"差值: {1.0 - prev_val}")
next_val = math.nextafter(1.0, math.inf)
print(f"1.0 的下一个浮点数: {next_val}")
print(f"差值: {next_val - 1.0}")
prev_val = math.nextafter(1.0, -math.inf)
print(f"\n1.0 的前一个浮点数: {prev_val}")
print(f"差值: {1.0 - prev_val}")
运行结果:
1.0 的下一个浮点数: 1.0000000000000002 差值: 2.220446049250313e-16 1.0 的前一个浮点数: 0.9999999999999999 差值: 1.1102230246251565e-16
示例 2:steps 参数
实例
import math
print("前进 10 步:", math.nextafter(1.0, math.inf, 10))
print("负数步数:", math.nextafter(1.0, -math.inf, -5))
print("前进 10 步:", math.nextafter(1.0, math.inf, 10))
print("负数步数:", math.nextafter(1.0, -math.inf, -5))
运行结果:
前进 10 步: 1.0000000000000007 负数步数: 0.9999999999999996
示例 3:特殊值
实例
import math
print("无穷大:", math.nextafter(math.inf, 0))
print("0 之后:", math.nextafter(0.0, 1.0))
print("负零:", math.nextafter(-0.0, 1.0))
print("无穷大:", math.nextafter(math.inf, 0))
print("0 之后:", math.nextafter(0.0, 1.0))
print("负零:", math.nextafter(-0.0, 1.0))
运行结果:
无穷大: 1.7976931348623157e+308 0 之后: 5e-324 负零: 5e-324
示例 4:计算 ULP
实例
import math
for x in [1.0, 2.0, 100.0]:
ulp = math.nextafter(x, math.inf) - x
print(f"ULP({x}) = {ulp}")
for x in [1.0, 2.0, 100.0]:
ulp = math.nextafter(x, math.inf) - x
print(f"ULP({x}) = {ulp}")
运行结果:
ULP(1.0) = 2.220446049250313e-16 ULP(2.0) = 4.440892098500626e-16 ULP(100.0) = 2.8421709430404007e-14
注意事项
- Python 3.9+ 才有此函数
- steps 参数也是 Python 3.9 新增
- 可用于理解浮点数精度限制
Python math 模块
点我分享笔记