python精确小数点_如何确定小数点是否可以精确地表示为Python float?

可以使用^{} module检查给定分数是否可以表示:from fractions import Fraction

def can_be_represented(num, den):

f = Fraction(num, den)

return Fraction.from_float(float(f)) == f

因为浮点数使用二进制分数,您很快就会发现,这可以简化为检查分母的二次幂:

^{pr2}$

但是,这不会对分子进行任何边界检查,请通过与^{}中的信息进行比较来添加边界检查:

^{3}$

以上版本测试:分母是2的幂

分子二元指数可以表示

分子中包含重要信息的部分可以进行移位以适应浮点的尾数。在

上述优化但可读性较差的版本是:def can_be_represented(num, den,

_mexp=sys.float_info.max_exp,

_mdig=sys.float_info.mant_dig):

f = Fraction(num, den)

num, den = f.numerator, f.denominator

numbl = num.bit_length()

return (

# denominator is a power of 2

den & (den - 1) == 0 and

# numerator exponent can be represented

numbl <= _mexp and

# numerator significant bits can be represented without loss

(numbl <= _mdig or num << numbl - _mdig >> numbl - _mdig == num)

)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值