如何计算python中{0}的第n个浮点

时间:2016-01-11 03:08:21

标签: python floating-point

我们知道浮点不均匀分布。我想计算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

1 个答案:

答案 0 :(得分:3)

布置How to return a string in my C code?格式的人非常聪明。他们确保下一个更高的可表示浮点值是一个简单的整数增量,从前一个增加,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]

如您所见,负数只需要在整个模式中添加一个位。