Python 将浮点常量编码为非常长的二进制字符串

Python 将浮点常量编码为非常长的二进制字符串,python,binary,ieee-754,Python,Binary,Ieee 754,最近,我一直在尝试实施NIST SP800-22中描述的15项随机性测试。为了检查我的功能实现,我一直在运行NIST文档为每个测试提供的示例。其中一些测试需要非常长的位字符串(最多一百万位)。例如,在其中一个示例中,输入是“e的前100000位”。这就提出了一个问题:如何生成浮点值的位表示,该浮点值超过Python中浮点数的可用精度 我已经找到了将整数转换为二进制字符串(bin()函数)和将浮点分数转换为二进制(重复除以2(慢!)并受浮点精度限制)的文章。我考虑过以某种方式使用$e=\sum_{

最近,我一直在尝试实施NIST SP800-22中描述的15项随机性测试。为了检查我的功能实现,我一直在运行NIST文档为每个测试提供的示例。其中一些测试需要非常长的位字符串(最多一百万位)。例如,在其中一个示例中,输入是“e的前100000位”。这就提出了一个问题:如何生成浮点值的位表示,该浮点值超过Python中浮点数的可用精度

我已经找到了将整数转换为二进制字符串(bin()函数)和将浮点分数转换为二进制(重复除以2(慢!)并受浮点精度限制)的文章。我考虑过以某种方式使用$e=\sum_{n=0}^{\infty}\frac{2n+2}{(2n+1)!}$以迭代方式构造它,计算下一部分值,将其转换为二进制表示,并以某种方式将其添加到累积表示中(仍在思考如何做到这一点)。然而,在这条路径上我遇到了同样的问题:当我在这个和上走得更远时,浮点值的精度

有人对用任意精确的浮点值创建任意长的位字符串有什么建议吗

PS-还有,有没有办法让我上面的降价数学公式在这里正确渲染?:-)

我维护库及其支持任意精度的二进制算法。这里是生成
e
的前100位的示例

>>> import gmpy2
>>> gmpy2.get_context().precision=100
>>> gmpy2.exp(1).digits(2)[0] 
'101011011111100001010100010110001010001010111011010010101001101010101
1111101110001010110001000000010'