问题标签 [arbitrary-precision]

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 投票
2 回答
427 浏览

python - 避免在 Python IRC bot 中进行昂贵的计算

我在公共 IRC 机器人中使用这个计算器。鉴于 Python 默认使用任意精度,这将允许任何用户执行类似calc 10000**10000**10000calc factorial(1000000)有效地“杀死”机器人的事情。

我想知道是否有某种方法可以避免这种情况。我已经尝试将表达式中的所有术语都转换为浮动,但float(factorial(1000000)在 Python 解释器中仍然需要很长时间才能完成,而且我不确定多线程方法是否是正确的方法。

0 投票
2 回答
1602 浏览

math - x86-64 大整数表示?

x86-64 上的高性能原生大整数库如何表示内存中的大整数?(还是会有所不同?有最常见的方法吗?)

我天真地考虑将它们作为以 0 结尾的数字字符串存储在 base 2 64中。

例如假设X在内存中为:

令 B = 2 64

然后

X = D n * B n + ... + D 2 * B 2 + D 1 * B 1 + D 0

空字符串(即 8 个字节的零)表示零。

这是一种合理的方式吗?这种方式的优缺点是什么?有没有更好的办法?

你将如何处理签名?2 的补码是否适用于这个可变长度值?

(发现这个:http : //gmplib.org/manual/Integer-Internals.html 什么是肢体?)

0 投票
1 回答
1410 浏览

precision - CPLEX 中没有解决方案,输入变化非常小

我在 C++ 中使用 CPLEX 来解决集线器位置问题,即 MIP,并且我最近发现了一组非常精确的输入,CPLEX 认为这些输入是不可行的(即 CPXMIP_INFEASIBLE),即使该问题肯定是可行的。在 MIP Presolve 期间,CPLEX 中的问题似乎出现了分歧;通常在这一点上问题被简化为空问题,但不是在不可行的输入集中。

我发现对输入数据进行几乎任何轻微调整都可以切换 CPLEX 找到解决方案的能力。例如,将 250.242566 更改为 250.242567,或者甚至只是将每个输入值四舍五入到最接近的整数,都会给我一个完全有效的解决方案。

软化我拥有的两个松弛约束也将允许一个解决方案,但考虑到输入数据,这些约束不应该被打破。求解后这些约束变量的值近似为 0,但略为负,例如 -0.7e-10。(这是可疑的,因为值应该大于 0。)

到底是怎么回事?我一无所知。我尝试调整一些与精度相关的 CPLEX 变量(即 CPX_PARAM_NUMERICALEMPHASIS、CPX_PARAM_EPOPT、CPX_PARAM_EPMRK、CPX_PARAM_EPRHS),但没有任何帮助。输入数据本身对精度的要求并不高——输入中的最小值为 1.412,最大值为 1520.984907。

我将不胜感激任何意见或建议!


更新:

我注意到在 MIP 的 Presolve 期间,不可行问题与可行问题有所不同。

检查 CPXgetprestat 是否存在这两个问题,我可以看到这两个问题之间的一个显着区别是在 pcstat 向量中,一个变量不能在不可行集中聚合出来(即,在不可行问题中的值为 0,而在可行问题中为 -4) .

此外,CPXgetprestat 的 ocstat 和 orstat 向量在不可行问题中各有一个非零值(可行问题没有,因为它已被简化为空问题),但我不确定如何处理这两个值。如果 orstat[0] == 7 和 ocstat[0] == 1,这是否意味着在 Presolve 之前的第 7 行和问题的第一个变量中有一些值得注意的地方?我将如何检查这个?

我已经比较了两个问题中 CPXwriteprob 的输出,除了我将输入值更改了 0.0001 以使问题不可行之外,没有什么不同。

0 投票
1 回答
1334 浏览

python - numpy.allclose 和多精度与 mpmath

在我的 python 代码中,我经常使用numpy.allclose. 另一方面,除了这些检查之外,实现还能够处理多精度 ( mpmath.mpc) 数字。如果我想为这些mpmath数字运行验证码,我会得到类似

检查两个多精度数组是否足够相等的最佳方法是什么?

0 投票
1 回答
270 浏览

java - 任意精度数字和 Javascript,Google Web Toolkit

这不是一个真正的问题,因为我确实解决了这个问题,但我想我会让每个人都知道,因为它可能会对人们使用 Google Web Toolkit 的方式产生相当广泛的影响。

所以问题之一是谷歌 gson在 JSON 中表示数字的方式。例如,int myInt = 2将成为"myInt":2long myLong = 5432198765L将成为"myLong":5432198765BigInteger myBI = 1310381093810938109481049128409487109378109248104098130981039810983将成为"myBI":1310381093810938109481049128409487109378109248104098130981039810983。虽然 gson 本身可以毫无问题地反序列化它,但 JSON 格式的 GWT 2.4 中的 AutoBeans 框架不会喜欢它。问题 6331修复了即将发布的 GWT 2.5 版本中的长表示。但是,由于 Javascript 数字精度的工作方式,问题 7555将无法解决。

因此,我们需要将 BigIntegers 表示为字符串,它会起作用,例如,String myBIStr = new BigInteger("1310381093810938109481049128409487109378109248104098130981039810983").toString()将表示为"myBIStr":"1310381093810938109481049128409487109378109248104098130981039810983". 在 GWT 端,这将产生一个字符串,我们将不得不用它构建一个 BigInteger。

谷歌为什么不解决 7555 这一切都说得通,但这让我想到了一个真正的悬而未决的问题:如何处理 Javascript 中的高精度数字?

一般来说,如果基于 Web 的 Javascript 和 Google Web Toolkit 前端要挑战原生前端,那么可能会出现我们使用任意精度数字的情况,而不是受限于评论 3的大约 53 位精度谈到。更糟糕的是,这个限制不会影响 node.js 或任何其他服务器端 Javascript 吗?

有没有很好的解决方法,尤其是使用 Google Web Toolkit 或与 Google Web Toolkit 无缝协作的解决方法?

0 投票
5 回答
3206 浏览

c++ - 任意精度小数运算 (C/C++) 中的浮点数与有理数

由于实现 AP 小数有两种方法,一种是模拟double数据类型的存储和行为,仅使用更多字节,另一种是使用现有的整数 APA 实现将小数表示为有理数,即作为一对整数,分子和分母,这两种方法中哪一种更有可能在性能方面提供有效的算术?(内存使用确实是次要问题。)

我知道现有的 C/C++ 库,其中一些提供带有“浮点数”的分数 APA,而另一些则提供有理数(但是它们都没有定点 APA),当然我可以对依赖于“ float" 实现与使用合理实现的实现相比,但结果将在很大程度上取决于那些特定库的实现细节,我必须从近十个可用的库中随机选择。因此,我感兴趣的两种方法(如果考虑定点 APA,则为三种)更具理论上的优缺点。

0 投票
4 回答
570 浏览

c++ - 如何找到硬件算术完全支持的最大整数?

我正在实现一个 BigInt 类,它必须支持对整数的任意精度操作。

引用 S.Skiena 的“算法设计手册”:

我应该在什么基础上做[编者注:任意精度]算术?- 以十进制实现您自己的高精度算术包可能是最简单的,因此将每个整数表示为以 10 为基数的字符串。然而,使用更高的基数要高效得多,理想情况下等于硬件算术完全支持的最大整数的平方根。

如何找到硬件算术完全支持的最大整数?如果我理解正确,作为我的机器是基于 x64 的 PC,支持的最大整数应该是 2^64(http://en.wikipedia.org/wiki/X86-64 - Architectural features: 64-bit integer capability),所以我应该使用base 2 ^ 32,但是在c ++中有没有办法以编程方式获得这个大小,所以我可以将我的base_type输入到它?

0 投票
2 回答
3681 浏览

java - 任意精度的精确含义是什么?

对于某些人来说,这可能是一个非常简单的问题,但我想知道出现在BigInteger的 JavaDoc 第一行中的任意精度的含义:

不可变的任意精度整数。

0 投票
1 回答
345 浏览

c++ - 使用Windows的c ++中的任意精度?

有没有可以在windows中相对容易实现的库?不久前我做了一些函数,它们使用数字数组来获得所需的结果。当我有时间时,我可能会在他们那里工作。

但是是否有任何这样的功能已经可以很容易地实现到 c++ 中?

0 投票
2 回答
609 浏览

objective-c - 任意精度位操作(目标 C)

我需要对 Objective C 中任意精度数字的表示进行位操作。到目前为止,我一直在使用 NSData 对象来保存数字——有没有办法对这些内容进行位移?如果没有,是否有不同的方法来实现这一目标?