这个问题与another question类似,但我不知道如何以简单的方式扩展该问题的答案。
在这里,我想计算double
中给定double
的第n Python
项。
该函数采用整数n
,双x
,并在double
之后输出n-th
(x
,如果是n
是消极的)。有没有一种有效的方法呢?
具体地说,设nth_fp_after是函数,那么nth_fp_after(x,n)应该等于nextafter(在C中)到x的应用的n倍; nth_fp_after(x,0)应为' x'等。
答案 0 :(得分:1)
answer of the question you pointed to正是您问题的答案。答案解决了64位浮点数的问题,它是C double的python等价物。
好吧,如果你添加以下
struct.unpack('!i',struct.pack('!f',x))[0]
到n
并用它来调用另一个答案的功能,你应该得到它。
修改后的完整解决方案如下:
import struct
def nth_fp(n, x=0.0):
if(x>=0):
m = n + struct.unpack('!Q',struct.pack('!d',x))[0]
else:
m = n - struct.unpack('!Q',struct.pack('!d',abs(x) ))[0]
if m < 0:
sign_bit = 0x8000000000000000
m = -m
else:
sign_bit = 0
if m >= 0x7ff0000000000000:
raise ValueError('out of range')
bit_pattern = struct.pack('Q', m | sign_bit)
return struct.unpack('d', bit_pattern)[0]
我在第二个参数中添加了一个默认值,以便您可以在两种情况下使用它,有或没有偏移x
。