问题标签 [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.
algorithm - 从 10^x 到 2^x 的大整数基数/基数转换
前言
我正在通过编写和改进我自己的 BigInt 库来学习计算机数学。到目前为止,我的第一个版本将基数为 10 的数字的每个数字存储在向量的连续元素中。它可以以任意精度进行乘法和加法。我想通过转换为基数 2^x 来使用标准 C++ 数据类型中的所有可用空间来加速它。
信息
我正在从以 10 为底的标准输入读取 1000 个或更多数字,我希望将它们转换为以 2^x 为底的数字,因此我可以轻松地将它们存储在标准 C++ 数据类型之一的数组或向量中,可能是无符号整数。我对如何进行基本转换只有一个想法,即用余数重复除法。下面是一些描述该方法的 C++ 代码:
难题
我迷失的一些事情是除以余数是否是对大整数进行基数转换的正确方法。我试过看看GMP 库是如何做到的。gmp/mpn/generic/set_str.c是“魔术”发生的相关c源文件,但我不确定那里发生了什么。Matt McCutchen 的BigInt似乎使用了带余数的重复除法。如果我确实使用这种方法,我基本上需要编写我的 BigInt 类的两个版本,一个用于在 Base10 中工作,另一个用于 Base2^x。
结论
- 提供有关将大量数字从字符串转换为 32 位字数组的正确步骤的建议。
- 帮助我了解 GMP 如何将字符串转换为 32 位字数组,而无需涉足许多抽象层。
使用 4 位字长的示例
我们要存储的号码(显然在小号上):123456789
无符号字符的范围为 0-255,如果我们想拆分我们的数字并将其存储在向量中,我们可以通过以下三种方式之一进行:
- 作为基数 10,我们的向量看起来像:[1,2,3,4,5,6,7,8,9]
- 这就是我的向量在我的第一个实现中的样子。
- 作为基数 100,我们的向量看起来像:[1,23,45,67,89]
- 易于从基数 10 转换为基数 100,具有 ciel(base10/2 中的数字)元素。
- 作为基数 256,我们的向量看起来像:[7,91,205,21]
显然,第三种解决方案是内部表示的最佳解决方案,也是我想要达到的。
gcc - 编译旧版本的 gcc
我正在尝试在 CentOS 5.5 操作系统上使用 gcc 版本 4.1.2 20080704 (Red Hat 4.1.2-50) 编译 gcc 版本 gcc4.3.2。最初编译器抱怨需要 gmp 和 mpfr 库,然后成功下载、编译和安装。
安装后,使用的新配置命令是:
../gcc4.3.2/gcc-4.3.2/configure --prefix=/home/shahw/gccdir/ --with-gmp=/usr/local/ --with-mpfr=/usr/local/
我现在遇到以下错误:
config.log 最后包含以下内容:
任何对潜在解决方案的提示将不胜感激。
c++ - How to extract base 10 mantissa and exponent using gpmlib in C++
I need to extract significand and exponent of a double in C++ using gpmlib.
Ex: double a = 1.234;
I would like to extract 1234 as significand and 3 as exponent so that a = 1234e-3. I heard that gpmlib supports this type functions. I am not sure how to this library.
Please share some sample code using this library.
import - GMP 进口/出口
我对导入/导出GMP 功能有疑问。我尝试转换负大整数和正大整数,但是当我使用负数时,我失去了符号。有没有关于它的例子?
出口:
进口:
c++ - 使用 GMP 的任意精度算术
我正在使用 GMP 库制作一个 Pi 程序,它将计算大约 7 万亿位数的 Pi。问题是,我不知道需要多少位来保存那么多小数位。
c - C 数字字节表示
我有一个unsigned char vector mynumber[]
代表 bigint 的。这个数字是正数,我想把它转换成负数。
我试过这种方式
我迭代了我的向量,但我需要求和一个。一个怎么加起来?
如果我有溢出,如何解决?
我使用 GMP,导出后我必须将向量传递给 SHA256。
最后,我使用导入(GMP)将摘要的结果转换为大数。
在导入中,我遇到了与导出相同的问题。标志很重要。
xcode4 - 在 Xcode 4 中使用 GMP——链接问题
我正在尝试在 Xcode 4.0.2 的演示 C++ 项目中使用 GMP 5.0.2 库,但无法使链接正常工作。
我查看了 StackOverflow 帖子中的评论:在 Xcode 中添加链接器标志,在 /usr/local/lib 和 /usr/local/include 中找到了 GMP 库和头文件,并将它们拖到项目目标中。这允许项目编译,但显然不能链接。我得到的错误是
关于我接下来应该尝试什么的任何建议?谢谢。
c++ - 如何在 Linux 环境中将 X 文件作为 C++ 中的数字读入 RAM?
我正在开发一个压缩程序,它需要将文件作为单个数字读入 RAM 并执行基本的数学运算和位移。我看过 GNU 的 gmp ,但是它与 c/c++ 的集成太差了,我不知道从哪里开始读取并将值放入 mpz_t 变量中。
c++ - 将 uint64 转换为 GMP/MPIR 编号
我在 Windows (MSVC 2010) 上使用 MPIR 2.4.0,我试图将一个无符号的 64 位整数添加到一个 mpz_t 数字。但是似乎 MPIR/GMP 不支持 64 位整数和 mpz_t 之间的直接转换。这是否意味着我必须将我的 uint64 转换为字符串并通过 mpz_init_set_str 读取?这既不是很吸引人,也不是看起来很快——两次转换都是徒劳的。
我错过了什么或者这里使用的技巧/黑客是什么?
干杯,
菲利普
php - GMP 和大数算术的 PHP 配置
我正在使用 PHP 在 projecteuler.net 上解决一些问题,但我发现在我当前安装的 PHP 中,我无法计算足够长或足够大的数字来解决一些问题。
一些关于 Stackoverflow 和通过 Google 进行的初步研究告诉我,我必须安装 PHP 扩展才能对非常大的数字进行数学运算。建议的一种扩展是 GMP,但我不完全确定如何配置我的 PHP 安装以使用 GMP。
我目前正在运行安装了 XAMPP 的 Windows 7 64 位(我认为版本是 2.5)。有没有办法配置我当前的 PHP 构建以使用 GMP?如何?!