我是靠谱客的博主 健忘母鸡,最近开发中收集的这篇文章主要介绍python 生成浮点数_python – 如何生成与比例无关的随机浮点数?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

你是正确的,你的方法不会返回一些数字.例如,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 – 如何生成与比例无关的随机浮点数?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部