概述
你是正确的,你的方法不会返回一些数字.例如,1.0和1.0000000000000002之间没有浮点数,但10 ** 1.0000000000000002是10.000000000000005,并且10.0和10.000000000000005之间有两个数字:10.000000000000002和10.000000000000004.算法永远不会返回这两个数字.
但你可以作弊并使用Decimal以更高的精度取幂:
>>> float(10 ** Decimal('1'))
10.0
>>> float(10 ** Decimal('1.0000000000000001'))
10.000000000000002
>>> float(10 ** Decimal('1.00000000000000015'))
10.000000000000004
>>> float(10 ** Decimal('1.0000000000000002'))
10.000000000000005
因此,任意需要生成足够精度的随机Decimal指数并将它们用作指数.假设64个二进制数字对于指数是足够的精度,代码将如下所示:
import sys, random
from decimal import Decimal
def _random_decimal(minval, maxval, added_prec):
# generate a Decimal in the range [minval, maxval) with the
# precision of additional ADDED_PREC binary digits
rangelen = maxval - minval
denom = rangelen << added_prec
return minval + Decimal(rangelen) * random.randrange(denom) / denom
def arbitrary():
min_exp = sys.float_info.min_exp - sys.float_info.mant_dig
max_exp = sys.float_info.max_exp
return float(2 ** _random_decimal(min_exp, max_exp, 64))
最后
以上就是健忘母鸡为你收集整理的python 生成浮点数_python – 如何生成与比例无关的随机浮点数?的全部内容,希望文章能够帮你解决python 生成浮点数_python – 如何生成与比例无关的随机浮点数?所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复