Python math.nextafter() 関数
浮動小数点数の計算では、隣接する浮動小数点数の間の関係を理解することが非常に重要です。コンピュータ内の浮動小数点数は離散的で、隣接する2つの浮動小数点数の間には最小の間隔があります。
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(f1.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(f1.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 で新たに追加されました
- 浮動小数点数の精度の制限を理解するために使用できます
その他の拡張