我怎样才能得到浮点数的前n位为Python中的整数 [英] How can I get first n bits of floating point number as integer in python
问题描述
0.625
,因为浮点数是 0b.101
,所以如果我想要前两位作为一个整数即 0b10
= 2
,我怎样才能达到这个python? 我已经试过把这个数字改成2的幂数,然后转换成一个int,所以如果我想要 n
C $ C> INT(0.625 *(2 ** N))。但是,这不适合我。
当我有一个大于 1
所以 24.548838022726972
会给我 392
而不是 12
。 ( 24.548838022726972
= 0b11000.100011001 ...
)
如果您想要 n
最高有效位,一种方法是使用 math.frexp
将您的号码规范化范围 [0.5,1.0)
。然后乘以 2 ** n
,并取整数部分会给你你所需要的。
>>>导入数学
3 / library / math.html#math.ldexprel =nofollow>
>>> math.frexp(24.54883)#有效数字和指数
(0.7671509375,5)
>>> math.frexp(24.54883)[0]#just the significantand
0.7671509375
>>> int(math.frexp(24.54883)[0] * 2 ** 4)#4 bit
$ / $ c
您可以使用 2
math.ldexp
函数来做第二部分的操作。 p>
>>> int(math.ldexp(math.frexp(24.54883)[0],4))
12
Suppose I have
0.625
as a floating point is0b.101
, so if I want the first two bits of that as an integer i.e.0b10
=2
, how can I achieve this in python?I've tried taking the number to a power of 2 and casting to an int, so if I want
n
bits I doint(0.625*(2**n))
. But that is not working for me.The problem occurs when I have a number greater than
1
so24.548838022726972
will give me392
rather than12
for the first four bits. (24.548838022726972
=0b11000.100011001...
)解决方案If you want the
n
most significant bits, one way to start is to usemath.frexp
to normalise your number to lie in the range[0.5, 1.0)
. Then multiplying by2**n
and taking the integer part will give you what you need.>>> import math >>> math.frexp(24.54883) # significand and exponent (0.7671509375, 5) >>> math.frexp(24.54883)[0] # just the significand 0.7671509375 >>> int(math.frexp(24.54883)[0] * 2**4) # most significant 4 bits 12
Instead of explicitly computing a power of
2
to scale by, you could use themath.ldexp
function to do the second part of the operation.>>> int(math.ldexp(math.frexp(24.54883)[0], 4)) 12
这篇关于我怎样才能得到浮点数的前n位为Python中的整数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!