从python中的给定double获取第n个双精度数

时间:2016-01-11 18:35:01

标签: python floating-point

这个问题与another question类似,但我不知道如何以简单的方式扩展该问题的答案。

在这里,我想计算double中给定double的第n Python项。 该函数采用整数n,双x,并在double之后输出n-thx,如果是n是消极的)。有没有一种有效的方法呢?

具体地说,设nth_fp_after是函数,那么nth_fp_after(x,n)应该等于nextafter(在C中)到x的应用的n倍; nth_fp_after(x,0)应为' x'等。

1 个答案:

答案 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