我們知道浮點不是均勻分佈的。我想計算Python
中從0開始的第n個浮點數。有沒有一種有效的方式來做到這一點?如何在python中從0計算第n個浮點數
設nth_fp爲函數。它需要一個整數並輸出一個浮點數。以下屬性是必需的:
1. nth_fp(0) should be 0
2. nth_fp(n)>0 if n>0
3. nth_fp(n)<0 if n<0
4.nth_fp(m)>nth_fp(n) if m>n
我們知道浮點不是均勻分佈的。我想計算Python
中從0開始的第n個浮點數。有沒有一種有效的方式來做到這一點?如何在python中從0計算第n個浮點數
設nth_fp爲函數。它需要一個整數並輸出一個浮點數。以下屬性是必需的:
1. nth_fp(0) should be 0
2. nth_fp(n)>0 if n>0
3. nth_fp(n)<0 if n<0
4.nth_fp(m)>nth_fp(n) if m>n
佈置IEEE 64-bit doubles格式的人非常聰明。他們確保下一個較高的可表示浮點值是一個從前一個浮點值開始的簡單整數增量,其中0.0
是全零的位模式。因此,對於正數n
,您可以直接將位模式直接轉換爲浮點數。
import struct
def nth_fp(n):
if n < 0:
sign_bit = 0x8000000000000000
n = -n
else:
sign_bit = 0
if n >= 0x7ff0000000000000:
raise ValueError('out of range')
bit_pattern = struct.pack('Q', n | sign_bit)
return struct.unpack('d', bit_pattern)[0]
正如你所看到的,負數只需要在總體模式中增加一位。
謝謝。我正在考慮你的代碼的一般性。你認爲它可以從'x'(它是nth_fp的參數)的第n個浮點擴展嗎? – zell
@zell平凡。只需將浮點位模式轉換爲整數並掩碼掉符號位,然後將n加到結果數字中,並通過上面的代碼運行。 –
你想如何處理'-0.0'? –