擅长:python、mysql、java
<p>获得范围的一种方法是使用整数,通过10<sup>100</sup>缩放概率。对于下限,始终向下舍入;对于上限,始终向上舍入:</p>
<pre><code>>>> lower = 10**100
>>> for i in range(10**6):
lower = lower * (2**32 - i) // 2**32
>>> lower
27390147476140722271150280539996691121583143636646
</code></pre>
<pre><code>>>> upper = 10**100
>>> for i in range(10**6):
upper = -(-upper * (2**32 - i) // 2**32)
>>> upper
27390147476140722271150280539996691121583143640960
</code></pre>
<p>调整它们:</p>
<pre><code>upper 27390147476140722271150280539996691121583143640960
p 2.7390147476139603e-51
lower 27390147476140722271150280539996691121583143636646
</code></pre>
<p>我们可以看到<code>p</code>(the <code>float</code>)实际上超出了实际范围,有点太小了。但它的前12位数字是正确的,所以看起来很不错</p>
<p>通过比较<code>lower</code>和<code>upper</code>,我们还得到了更多匹配的数字,从而得到了正确的数字:2.739014747614072227115028053996911215831436E-51。有了更大的比例因子,我们可以得到更多</p>