主要观点:作者在研究simple-id库时,对在给定范围内生成无偏随机数的不同方法感兴趣,通过计算基于生日问题的预期重复次数来测试随机数生成器(RNG)的效果,介绍了计算预期重复次数的公式及相关 JavaScript 代码,发现原始代码结果为负数,经多次尝试改进代码以提高精度,包括使用BigInt
、log1p
、expm1
等函数,最终在 JavaScript 中得到较准确结果,还尝试在 C 语言中使用fma
和long double
类型进一步提高精度,但仍仅到九位有效数字,作者表示已尽力,希望能找到更好的计算方法。
关键信息:
- 计算预期重复次数公式:n−d+d(d−1d)nn - d + d \left( \frac{d-1}{d} \right)^n
- JavaScript 代码改进:使用
BigInt
、log1p
、expm1
等函数提高精度 - C 语言代码尝试:使用
fma
和long double
类型提高精度
重要细节:
- 在 JavaScript 中,最初计算结果为-19.72998046875,经改进后分别使用
BigInt
、log1p
、expm1
得到不同精度结果 - 在 C 语言中,使用
fma
和long double
类型分别得到稍高精度结果,但仍仅到九位有效数字
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。