这个问题与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',依此类推。

最佳答案

answer of the question you pointed to正是您问题的答案。答案解决了64位浮点数的问题,这是python等效的C double。



好吧,如果您添加以下内容

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

07-24 09:44
查看更多