问题标签 [bignum]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
algorithm - 二进制到十进制基移位
我需要一种将任意大小的无符号整数(以二进制格式存储)转换为十进制整数的算法。即使其易于阅读;)
我目前使用可能(或显然)有点幼稚的方法,通过除以十来连续计算模数和余数。
不幸的是,速度有点……蹩脚。
例如,我计算 2000^4000(使用我的 bignum 库)大约需要 1.5 秒(请不要燃烧 xD)。然而,包括必要的基本转换在内的打印需要大约 15 分钟,这很烦人。
我已经测试了 bc ,它在不到一秒的时间内完成了这两项工作。
它是如何做到的?(不是带有 ffts 的乘法东西,以及任何只有基本转换的东西)
sha - 以可逆方式从大整数生成伪自然短语
我有一个大而“唯一”的整数(实际上是一个 SHA1 哈希)。
注意:虽然我在这里谈论的是 SHA1 哈希,但这不是密码学/安全问题!我不是要破坏 SHA1。如果有帮助的话,想象一个随机的 160 位整数而不是 SHA1。
我想(除了玩得开心)找到一种算法,将 SHA1 哈希映射到计算机生成的(伪)英文短语。映射应该是双向的(即,知道算法,必须能够从该短语计算原始 SHA1 哈希。)
这句话不必说得通。我什至会接受一整段废话。(虽然一个段落的质量——英语性——可能应该比一个短语更好。)
更好的算法会产生更短、更自然、更独特的短语。
一个变体:如果我只能使用哈希的一部分,那也没关系。说,前六个十六进制数字很好。
生成的短语的可能用法:Git 提交 ID 的人类可读版本,用作给定程序版本的座右铭,该程序版本是从该提交构建的。(正如我所说,这是“为了好玩”。我并不是说这非常实用——或者比 SHA1 本身更具可读性。)
可能的方法:在过去,我尝试建立一个概率表(单词),并根据我从 SHA 读取的位,将短语生成为马尔可夫链,为生成器播种(从概率树中挑选分支)。这不是很成功,产生的短语太长而且丑陋。我不确定这是一个错误,还是算法中的一般缺陷,因为我必须尽早放弃它。
现在我正在考虑再次尝试解决这个问题。关于如何解决这个问题的任何建议?你认为马尔可夫链方法可以在这里工作吗?还有什么?
rspec - 安装 rspec gem bignum 时出错,太大而无法转换为“long”
我最近试图将我安装的 rspec 版本从 -v 2.5.0 更改为 1.3.0 以使用 rails 2.x。卸载 cucumber、rspec-rails 和 rspec 后,我重新安装,然后收到错误“错误:执行 gem ... (RangeError) bignum 太大而无法转换为 `long'。我尝试安装其他 gem rspec-rails和黄瓜,但他们现在也给了我这个错误。即使我尝试安装在出现相同错误之前安装的 rspec -v 2.5.0。我可以很好地安装其他 gem。我只有在我尝试安装与 rspec(rspec、rspec-rails 和 cucumber)相关的 gem。这真的很痛苦,因为我需要为我的 rails 应用程序运行一些 cucumber 测试。任何见解都值得赞赏。- Adam
c - 如何在 C 中解析十进制 UUID 字符串?
我有一个表示为十进制数的 UUID(128 位数字),我需要将其解析为 C 中的数字形式。我的目标数据结构是 char[16],不能选择使用 bignum 库。有人可以指出一个合适的算法吗?
math - 从几个余数中恢复一个数(中国余数定理)
我有一个长整数,但它不是以十进制形式存储的,而是作为一组余数存储的。
所以,我没有N
数字,而是一组这样的余数:
我知道,N 小于这些素数的乘积,所以中国剩余定理在这里确实有效(http://en.wikipedia.org/wiki/Chinese_remainder_theorem)。
如果我有这 6 个余数,如何N
以十进制恢复?任何程序都可以做到这一点(C/C+GMP/C++/perl/java/bc)。
例如,最小 N 可以有这组余数:
testing - 测试 bignum 算术
我正在编写一个任意精度的有理数包,我需要测试它的正确性和效率。当然,我可以自己组合一组临时测试,但由于我远不是第一个这样做的人,我认为值得一问:有人可以推荐一组我可以使用的现有测试吗?
编辑:我最终编写了一个测试例程,每次在循环中生成三个随机数并验证各种算术恒等式是否成立。到目前为止,它在数字代码中发现了几个错误。这是实际的代码:
perl - 如何在不丢失精度的情况下打印 Perl bignum?
我的 Perl 的 printf(为 darwin-thread-multi-2level 构建的 ActiveState v5.10.1)使用 %f 转换不尊重我超过 1e-6 位的值,即使使用 bignum:
如何在不丢失精度的情况下打印我的输入?
我真正的问题是我需要操纵这个数字(例如,$x/0.000_000_001,或者更糟糕的是,$x/0.000_001_024,我不能用 substr() 函数调用来伪造它),但是在我进入“有趣”部分之前,目前的减排已经让我感到难过。
c - 如何使用 C 和 GMP_Bignum 将任意原始数据转换为整数
我正在用 GNU Bignum 编写一个程序,我想做的只是读取一个二进制文件,并将原始数据用作 Bignum 整数,但是每当我读取这个文件时,即使它长约 2MB 并尝试打印数字它给了我一个非常小的数字,比如 67 或 300,我用不同的文件尝试过它,它的行为都一样。下面的源代码可能会让你们知道我在说什么。
这里有什么问题?
perl - 在 Perl 中,如何检测是否在 5.9.4 之前的版本中加载了 bignum 支持?
Perlbignum
bigint
和bigrat
pragma 有用地包含一个in_effect
函数,该函数将通过探测提示哈希来检测 pragma 是否加载到作用域中。然而,这只适用于 perl 的 5.9.4 及更高版本,因为那是引入词法提示哈希的时候。
有没有什么好的方法可以确定这些 pragma 在早期版本的 perl 中是否有效?对于我的使用,我想支持回到 5.8.8 版本。
更新:如果我可以访问可能有效的词汇空间,则下面的 mob 解决方案将起作用bignum
。但是,对于我的用例,我正在编写一个将从该空间调用的函数,并且在该函数内部,我需要确定调用者的作用域是否已bignum
加载。(即,在我的代码中,我正在调用类似于bignum::in_effect(2)
在调用堆栈中查找几帧的东西)
c++ - C ++中的Bignum除法和赋值
我正在编写自己的 bignum 类来处理大数。到目前为止,我已经超载了operator=
and operator+
。如何进行长除法?
另外,现在我只能将整数范围内的值分配给 bignum 对象。如何分配超出 int 范围的值?没有字符串可以做到这一点吗?