问题标签 [gmp]

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.

0 投票
3 回答
1290 浏览

c - C中的任意精度随机数:生成无大气噪声的蒙特卡罗模拟

我知道还有其他与此类似的问题,但是以下问题与 C 中用于蒙特卡洛模拟的任意精度随机数生成有关。

当大气噪声并不总是可用时,我们如何在 C 中生成高质量的任意精度随机数,而不依赖会产生瓶颈的磁盘 i/o 或网络访问?

libgmp 能够生成随机数,但是,与伪随机数生成器的其他实现一样,它需要一个种子。正如手册中提到的,“系统时间很容易猜测,所以如果需要不可预测性,那么它绝对不应该是种子值的唯一来源。”

是否有用于生成随机数或随机数种子的便携式/移植库?libgmp 还提到“在某些系统上,有一个特殊的设备 /dev/random 提供更适合用作种子的随机数据。” 但是,/dev/random只能/dev/urandom在*nix 系统上使用

0 投票
1 回答
2214 浏览

c++ - 极大的整数乘法和加法

问候,

我需要将存储在文本文件中的两个极长整数值相乘(通过 GMP(准确地说是 MPIR)导出,因此它们可以是任何基数)。现在,我通常只通过 mpz_inp_str() 函数导入这些整数并在 RAM 中执行乘法运算,但是,这些值太长以至于我无法真正加载它们(每个大约 1 GB 数据)。最快的方法是什么?也许有一些外部库已经在做这种事情了?是否有任何易于实现的方法(性能并不是非常重要,因为此操作只会执行一次或两次)?

tl; dr:我需要将值相乘,它们不适合进程内存限制(Windows)。

感谢您的时间。

0 投票
1 回答
11879 浏览

c++ - 退出代码 3(不是我的返回值,正在寻找来源)

问候,

我的程序以代码 3 退出。没有错误消息,没有异常,并且退出不是由我的代码启动的。

当我尝试从文本文件中读取极长的整数值时会出现问题(文本文件存在并正确打开,并且事先读取成功)。

我正在使用大量内存(事实上,我认为这可能是原因,因为我几乎可以肯定我超过了每个进程 2GB 的内存限制)。我还使用 GMP(或者更确切地说是 MPIR)库来乘以 bignums。我相当确定这不是文件 I/O 问题,因为我在完全在内存中的先前程序版本上得到了相同的错误代码。

系统:
MS Visual Studio 2008
MS Windows Vista Home Premium x86
MPIR 2.1.0 rc2
4GB RAM

这个错误代码可能来自哪里?

编辑:这是与代码一起退出的过程

EDIT2:完全在内存中的版本,也以 3 退出

0 投票
2 回答
2763 浏览

c++ - 使用 GMP.h 头文件时的返回类型

当我使用 gmp.h 头文件时。我需要一个函数,它接受 mpz_t 类型的输入并返回 mpz_t 类型。我是使用 gmp.h 的初学者所以,这里是我接近的代码的快照...

但它会显示错误:

  1. pow 未在此范围内使用。”,尽管我在文件的最开头添加了 math.h。
  2. sum_upto 声明为返回数组的函数...
0 投票
3 回答
5856 浏览

division - 如何实现大数的长除法(bignums)

我正在尝试为 bignums 实现长除法。不幸的是,由于嵌入式编程的限制,我不能使用像 GMP 这样的库。此外,我想要学习如何实施它的智力练习。到目前为止,我已经使用任意长度的字节数组完成了加法和乘法(所以每个字节就像一个 base-256 数字)。

我只是想开始实施除法/模数,我想知道从哪里开始?我在网上发现了很多高度优化(又名不可读)的代码,这对我没有帮助,而且我发现了很多高科技的数学白皮书,我无法从中弥合理论和实现之间的差距.

如果有人可以推荐一种流行的算法,并为我指出一个易于理解的易于实现的解释,那就太好了。

-edit:我需要在被除数为~4000bits,除数为~2000bits 时工作的算法

-edit:这个算法是否适用于 base-256 ?http://courses.cs.vt.edu/~cs1104/BuildingBlocks/divide.030.html

-编辑:这是我真正应该使用的算法(牛顿除法)吗?http://en.wikipedia.org/wiki/Division_(digital)#Newton.E2.80.93Raphson_division

0 投票
1 回答
3958 浏览

c++ - GMP 如何将其整数存储在任意数量的字节上?

2^64 距离我的内存/硬盘驱动器可以处理的“无穷大”还很远……

首先,我想知道 GMP 如何与内存/处理器一起工作,因为它会进行某种阴暗的优化......

我还想知道是否有一种方法可以在任意数量的字节上存储整数(无符号,这更容易)。例如,在 50 个字节上,我的上限为 2^400 -1。要做的事情是与进位很好地配合,以保持数字从一个字节到另一个字节一致,我对此有一些想法,但我真的不确定这是否是最快的方法。我什至不确定我是否正确。

我猜GMP使用这种方式来存储它的数据,但我只是想要一些(甚至很少)解释或一些理论的转发(我没有任何博士学位,所以不要强硬)。

0 投票
1 回答
469 浏览

windows - 在 Windows 上使用 GMP

我正在尝试在 Windows 上的 C++ 程序中使用 GMP,并且我使用 Cygwin 成功编译了它,我得到了一个 .a 文件,它是 .lib 文件的 linux 版本。有没有办法可以将它与 Visual C++ 编译器一起使用,或者有没有办法为 Windows 编译 GMP 以生成 .lib 文件?

0 投票
1 回答
230 浏览

gmp - 在 GMP 中,将多精度类型作为返回参数和操作数参数传递是否有效?

我有一个问题,我需要准备好探索比 unsized long long 可以表示的更大范围的数字(范围由 3^(n*n) 表示)。该社区已建议我将 GMP 用于多精度数字。因为我需要一次遍历一个数字的范围,所以我需要一种方法来轻松地增加我的计数器。

我的冲动是使用“mpz_add_ui(my_counter, my_counter, 1UL);”,但我担心将我的计数器作为返回参数和加数传递可能会导致结果被破坏。如果函数在计算答案时更改了返回运算符,它可能会更改数字,从而导致答案错误。递增不太可能造成任何麻烦,但是添加两个大的 mpz_t 呢?或者乘法,甚至是指数?文件无法平息或证实我的担忧。我试过查看源代码,但是宏、稀疏注释和从一个文件跳转到另一个文件的组合让我得出结论,我还不够优秀,还不足以成为一名程序员。

为了安全起见,我编写了一个函数,它显示了我相当肯定会起作用的格式,但我宁愿避免它,因为我确信它会减慢我的程序速度:

所以,我的问题是这个。将多精度类型作为返回参数和操作数之一传递给 GMP 算术函数是否安全,或者这样做会导致结果损坏?

0 投票
2 回答
1849 浏览

c++ - 如何序列化 GMP mpf 类型?

似乎 GMP 仅提供 mpf(浮点)类型的字符串序列化:

mpf_get_str(),mpf_class::get_str()

mpz(整数)类型有一个额外的原始字节接口:mpz_out_raw()

http://gmplib.org/manual/Function-Index.html

我错过了什么吗?有谁知道另一个可以序列化 GMP 浮点数的库?有谁知道另一个提供健壮序列化的 bignum 库?

编辑:我也很乐意序列化 MPFR 的 mpfr_t,同样,它似乎只提供字符串输出:http ://www.mpfr.org/mpfr-current/mpfr.html#Function-Index

0 投票
7 回答
35735 浏览

configuration - GCC 找不到 GMP、MPFR 和 MPC 库

我正在尝试在 Mac OS 10.5.7 上交叉编译 GCC。我在安装 GMP、MPFR 和 MPC 后使用此命令配置 GCC:

我收到了这个错误:

为什么 GCC 可以找到 GMP、MPFR 和 MPC 的标头,但找不到库?