「任意の」正の浮動小数点数と呼ぶことにしたものを生成したいと思います。つまり、スケールに依存しない乱数 (つまり、対数が均一に分布する数) です。私はあまり数学者ではないので、私が求めているものには別の名前があるかもしれないことは知っています.
これが私の最初の素朴な解決策です:
import sys
import random
def arbitrary(min=sys.float_info.min_10_exp, max=sys.float_info.max_10_exp):
return 10 ** random.uniform(min, max)
これはおそらく理想的ではないと思います.1つには、 の限られた精度random.uniform()
と浮動小数点表現自体との間に何らかの相互作用があり、より高い桁数で予想される出力にバンチングとギャップが発生する可能性があると思います.
より良いアプローチはありますか?ランダムなビットの文字列を生成し、それを浮動小数点数に変換する方が理にかなっていますか?
編集: コメントで Oli Charlesworth が指摘したように、「ランダムなビットを float に変換する」というアイデアは、私が望むことを行いません (これは、log(n) の均一な分布です)。