问题标签 [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 - 将 bignum 解析为 16 位整数列表
我必须实现一些 bignum 算术。该数字必须拆分为 16 位整数列表。
那不是问题。问题是将字符串解析为这种表示法。如果它是一个整数,我会向后遍历字符串,从字符中取出数字并添加 <number>*10^stringposition。(在本例中,最后一个字符的字符串位置为 1)
但是 bignum 不应该有乘法,我认为应该有一个更聪明更快的方法。(一个 int 乘法是 O(1);一个 bignum 乘法不是)
怎么做?
(我不能使用像 gmp 这样的完整库)
java - java.bigInteger valueOf 是如何工作的?
我正在制作一个没有 BigInteger、BigDecimal 等的涉及大数字的项目。我已经设法完成了所有基础知识,但现在我需要增加计算阶乘的能力。我的 BigNumber 将数据存储为 int[] 。
这是 BigInteger 的示例解决方案,但如果没有我的号码的实际值,我将无法使用它。
那么如何计算价值呢?将整数从最后一个到第一个相加,将 10 乘以 10,将 100 乘以 100 等等,然后将其存储多久?
BigInteger 的来源:http: //developer.classpath.org/doc/java/math/BigInteger-source.html
java - 在没有BigInt的Java中添加负数和正数
我正在尝试编写一个小型 Java 类。我有一个名为 BigNumber 的对象。我编写了添加两个正数的方法,以及减去两个也是正数的其他方法。
现在我希望他们处理负数。所以我写了几个'if'语句,例如。
等等
不幸的是,代码看起来很丑。就像一堆 if 和 else。有没有更好的方法来编写这种代码?
编辑
我不能只是这样做,this.add(sn1)
因为有时我想将正数添加到负数或将负数添加到负数。但是 add 只能处理正数。所以我必须使用基本的数学,例如:而不是将负数添加到负数,而是添加this.abs()
(数字的绝对值)sn1.abs()
并返回带有相反符号的结果。德鲁:这条线来自方法 _add。我使用这种方法来决定如何处理它收到的数字。发送他们添加方法?或者将它们发送到 subract 方法但顺序不同(sn1.subtract(this)
)?等等..
如您所见 - 这段代码看起来很糟糕..
perl - 如何设置 Perl 的 bignum 的精度级别?
我正在尝试在 Perl 中使用 bignum 模块并希望设置精度。我知道这可以通过模块的 CPAN 页面上详述的单行来完成:
...这将打印出 20 到 50 位精度的平方根,但我想知道是否有任何方法可以在脚本中设置精度,例如:
到目前为止,我已经在这里、Google 和 PerlMonks 进行了搜索,但没有任何运气。提前致谢。
graphics - 基于着色器的 mandelbrot explorer 的大浮点数
我已经设法使用 Open Gl 和 NVidia 提供的 CGFX SDK 创建了一个简单的 mandelbrot 浏览器。它工作得很好,但目前是基于浮点的,因此没有太多的“深度”——随着从最小复数到最大复数的距离变小,精度会丢失,并且生成的图像是“像素化的”。
不幸的是,CGFX 似乎不支持双精度,即使这样,双精度也仅限于我的意图。因为 CGFX,因为它的预期设计,没有 bignum 类,我认为最好创建我自己的类。
我设法在 C++ 中创建了一个原型——它只使用无符号整数——但是当我试图将它移动到 CGFX 时,FX Composer 2.5 似乎无法编译它。因为我只使用无符号整数、乘法和加法,所以代码包含很多位移操作,根据 FX Composer 2.5,这些操作在我的配置文件中不可用。
我知道这个问题包含很多查询,但不幸的是,我对数值分析、着色器编程或 open gl 并不是很熟悉,此时我感到不知所措——而且很确定我正在尝试修复泄漏用大锤。
因此,如果有人对这些问题中的任何一个有答案,我将不胜感激:
CGFX 或任何其他着色器语言是否支持无符号整数和浮点数的位移运算符(需要将浮点数转换为大浮点数)?
CGFX 或任何其他着色器语言是否支持双精度或更高的浮点?
有没有更精致的数学方法来处理我的问题,而不是创建一个大的浮点类?
如果有人需要更多说明或代码片段,请随时提出。
c - 二进制补码形式的 64 位负整数
我正在阅读 GNU PDF 库的源代码,尤其是它们对 64 位整数的实现。他们将 64 位整数定义为两个 32 位整数的结构 - 高阶 int 是有符号的,低阶 int 是无符号的。这是头文件中的相关代码:
根据架构手册,负数以二进制补码形式表示。我对此功能有疑问:
[来自pdf-types.c 的代码]
根据我的阅读,要获得数字的二进制补码,您需要反转所有位并将结果加 1。但是,在上述函数中,对于 value<0,它们仅将高位设置为 0xFFFFFFFF,但根本不更改低位。'value'的位不应该也反转,然后加1吗?有人可以解释一下吗?
谢谢。
math - MPFR 舍入问题
我刚刚开始使用 MPFR 任意精度库,很快就会遇到非常奇怪的行为。使用它的主要目标是提高大参数“触发”的精度,这在 MPFR 中非常有效。
但后来我决定检查简单的数学,这令人难以置信——即使在具有严格答案的简单示例中也存在舍入错误,并且不依赖于使用的精度。
即使在像 1.1 * 1 这样的示例中,结果也是 1.10000000000000008881784...而且这个结果以疯狂的 2000 位精度(正常双精度为 53)给出!
可能是我的系统问题,但在线MPFR也存在类似问题。您可以在线尝试这样的示例:http: //ex-cs.sist.ac.jp/~tkouya/try_mpfr.html
1 * 1.1 @ 64 位 = 1.10000000000000000002
但是在线版本会随着精度的提高而进一步移动错误,但在我的安装中 - 没有。
我的系统:Ubuntu 9.10 + gmp 5.0.0.1 + mpfr 2.4.2
c - 如何使用 C 上的 GMP lib 将 mpz_t 分成两部分?
在c上使用GMP,我有一个十进制形式的大整数“mpz_t n”,我怎样才能把它分成两部分?实际上,这两个部分在二进制中应该具有相同的长度。
例如,也许我可以将 n 转换为 112 位的二进制,然后我想将其切割成 2 个 56 位的部分。
谢谢
c++ - BN_hex2bn 在 openSSL 中神奇的段错误
大家好,这是我在stackoverflow上的第一篇文章,如果有点长,我很抱歉。
我正在尝试为我自己的项目构建握手协议,并且在服务器将客户端 RSA 的公钥转换为 Bignum 时遇到问题。它适用于我的 clent 代码,但在尝试将客户端公共 RSA 的十六进制值转换为 bignum 时,服务器会出现段错误。
我已经检查过 RSA 数据之前或之后没有垃圾,并且在网上查看过,但我被卡住了。
头段:
初始化函数:
问题代码(在 Network::server_handshake 中):
程序段错误在
出现错误(valgrind 输出)
在 0x50DBF9F 读取大小为 8 的无效:BN_hex2bn(在 /usr/lib/libcrypto.so.0.9.8 中)由 0x40F23E:Network::server_handshake() (Network.cpp:177) 由 0x40EF42:Network::startNet() ( Network.cpp:126) by 0x403C38: main (server.cpp:51) Address 0x20 is not stack'd, malloc'd or (recently) free'd
进程以信号 11 (SIGSEGV) 的默认操作终止 访问不在地址 0x20 处 0x50DBF9F 的映射区域内:BN_hex2bn(在 /usr/lib/libcrypto.so.0.9.8 中)
而且我不知道为什么会这样,我在客户端程序中使用完全相同的代码,它工作得很好。任何输入都非常受欢迎!
c - bignum 库和素数测试算法的便捷基础是什么?
我将编写关于 RSA 的原始论文中提出的 Solovay-Strassen 素性测试。
此外,我将需要编写一个小型 bignum 库,因此在搜索 bignum 的方便表示时,我遇到了这个规范:
我还将使用 Karatsuba 方法编写一个乘法例程。
所以,对于我的问题:
在 bignum 结构中存储整数数据时使用什么基础比较方便?
注意:我不允许对 bignum 使用第三方或内置实现,例如 GMP。
谢谢你。