Python3 math.ulp()方法 - 求浮點(diǎn)數(shù)的最小有效比特位

2023-04-28 17:22 更新

Python math 模塊  math 模塊


描述

math.ulp(x)方法返回給定浮點(diǎn)數(shù)的最小單位。

這個(gè)單位是指在給定浮點(diǎn)數(shù)的范圍內(nèi),兩個(gè)相鄰的浮點(diǎn)數(shù)之間的差值。

例如,對(duì)于輸入值3.1415926,math.ulp(x)將返回2.220446049250313e-16。

這意味著在3.1415926的范圍內(nèi),相鄰的兩個(gè)浮點(diǎn)數(shù)之間的差值為2.220446049250313e-16。


語(yǔ)法

math.ulp()方法語(yǔ)法如下:

math.ulp(x)

參數(shù)說明:

  • x -- 必需,一個(gè)數(shù)字

返回值

  • 如果 x 是 NaN (非數(shù)字),則返回 x。
  • 如果 x 為負(fù)數(shù),則返回 ulp(-x)。
  • 如果 x 為正數(shù),則返回 x。
  • 如果 x 等于零,則返回 去正規(guī)化的 可表示最小正浮點(diǎn)數(shù) (小于 正規(guī)化的 最小正浮點(diǎn)數(shù) sys.float_info.min)。
  • 如果 x 等于可表示最大正浮點(diǎn)數(shù),則返回 x 的最低有效比特位的值,使得小于 x 的第一個(gè)浮點(diǎn)數(shù)為 x - ulp(x)。
  • 在其他情況下 (x 是一個(gè)有限的正數(shù)),則返回 x 的最低有效比特位的值,使得大于 x 的第一個(gè)浮點(diǎn)數(shù)為 x + ulp(x)。

實(shí)例

以下實(shí)例返回指定數(shù)字的精度:

import math
x = 1.0
p = 0
while x != x + 1:
   x = x * 2
   p = p + 1
   print(f"當(dāng)前x的值:{x},當(dāng)前x的循環(huán)次數(shù){p},當(dāng)前x的精度{math.ulp(x)}")
 

輸出結(jié)果:

當(dāng)前x的值:2.0,當(dāng)前x的循環(huán)次數(shù)1,當(dāng)前x的精度4.440892098500626e-16
當(dāng)前x的值:4.0,當(dāng)前x的循環(huán)次數(shù)2,當(dāng)前x的精度8.881784197001252e-16
當(dāng)前x的值:8.0,當(dāng)前x的循環(huán)次數(shù)3,當(dāng)前x的精度1.7763568394002505e-15
當(dāng)前x的值:16.0,當(dāng)前x的循環(huán)次數(shù)4,當(dāng)前x的精度3.552713678800501e-15
當(dāng)前x的值:32.0,當(dāng)前x的循環(huán)次數(shù)5,當(dāng)前x的精度7.105427357601002e-15
當(dāng)前x的值:64.0,當(dāng)前x的循環(huán)次數(shù)6,當(dāng)前x的精度1.4210854715202004e-14
當(dāng)前x的值:128.0,當(dāng)前x的循環(huán)次數(shù)7,當(dāng)前x的精度2.842170943040401e-14
當(dāng)前x的值:256.0,當(dāng)前x的循環(huán)次數(shù)8,當(dāng)前x的精度5.684341886080802e-14
當(dāng)前x的值:512.0,當(dāng)前x的循環(huán)次數(shù)9,當(dāng)前x的精度1.1368683772161603e-13
當(dāng)前x的值:1024.0,當(dāng)前x的循環(huán)次數(shù)10,當(dāng)前x的精度2.2737367544323206e-13
當(dāng)前x的值:2048.0,當(dāng)前x的循環(huán)次數(shù)11,當(dāng)前x的精度4.547473508864641e-13
當(dāng)前x的值:4096.0,當(dāng)前x的循環(huán)次數(shù)12,當(dāng)前x的精度9.094947017729282e-13
當(dāng)前x的值:8192.0,當(dāng)前x的循環(huán)次數(shù)13,當(dāng)前x的精度1.8189894035458565e-12
當(dāng)前x的值:16384.0,當(dāng)前x的循環(huán)次數(shù)14,當(dāng)前x的精度3.637978807091713e-12
當(dāng)前x的值:32768.0,當(dāng)前x的循環(huán)次數(shù)15,當(dāng)前x的精度7.275957614183426e-12
當(dāng)前x的值:65536.0,當(dāng)前x的循環(huán)次數(shù)16,當(dāng)前x的精度1.4551915228366852e-11
當(dāng)前x的值:131072.0,當(dāng)前x的循環(huán)次數(shù)17,當(dāng)前x的精度2.9103830456733704e-11
當(dāng)前x的值:262144.0,當(dāng)前x的循環(huán)次數(shù)18,當(dāng)前x的精度5.820766091346741e-11
當(dāng)前x的值:524288.0,當(dāng)前x的循環(huán)次數(shù)19,當(dāng)前x的精度1.1641532182693481e-10
當(dāng)前x的值:1048576.0,當(dāng)前x的循環(huán)次數(shù)20,當(dāng)前x的精度2.3283064365386963e-10
當(dāng)前x的值:2097152.0,當(dāng)前x的循環(huán)次數(shù)21,當(dāng)前x的精度4.656612873077393e-10
當(dāng)前x的值:4194304.0,當(dāng)前x的循環(huán)次數(shù)22,當(dāng)前x的精度9.313225746154785e-10
當(dāng)前x的值:8388608.0,當(dāng)前x的循環(huán)次數(shù)23,當(dāng)前x的精度1.862645149230957e-09
當(dāng)前x的值:16777216.0,當(dāng)前x的循環(huán)次數(shù)24,當(dāng)前x的精度3.725290298461914e-09
當(dāng)前x的值:33554432.0,當(dāng)前x的循環(huán)次數(shù)25,當(dāng)前x的精度7.450580596923828e-09
...
當(dāng)前x的值:1125899906842624.0,當(dāng)前x的循環(huán)次數(shù)50,當(dāng)前x的精度0.25
當(dāng)前x的值:2251799813685248.0,當(dāng)前x的循環(huán)次數(shù)51,當(dāng)前x的精度0.5
當(dāng)前x的值:4503599627370496.0,當(dāng)前x的循環(huán)次數(shù)52,當(dāng)前x的精度1.0
當(dāng)前x的值:9007199254740992.0,當(dāng)前x的循環(huán)次數(shù)53,當(dāng)前x的精度2.0   

Python math 模塊  math 模塊


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)