问题标签 [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.
python - 避免在 Python IRC bot 中进行昂贵的计算
我在公共 IRC 机器人中使用这个计算器。鉴于 Python 默认使用任意精度,这将允许任何用户执行类似calc 10000**10000**10000
或calc factorial(1000000)
有效地“杀死”机器人的事情。
我想知道是否有某种方法可以避免这种情况。我已经尝试将表达式中的所有术语都转换为浮动,但float(factorial(1000000)
在 Python 解释器中仍然需要很长时间才能完成,而且我不确定多线程方法是否是正确的方法。
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 什么是肢体?)
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 以使问题不可行之外,没有什么不同。
python - numpy.allclose 和多精度与 mpmath
在我的 python 代码中,我经常使用numpy.allclose
. 另一方面,除了这些检查之外,实现还能够处理多精度 ( mpmath.mpc
) 数字。如果我想为这些mpmath
数字运行验证码,我会得到类似
检查两个多精度数组是否足够相等的最佳方法是什么?
java - 任意精度数字和 Javascript,Google Web Toolkit
这不是一个真正的问题,因为我确实解决了这个问题,但我想我会让每个人都知道,因为它可能会对人们使用 Google Web Toolkit 的方式产生相当广泛的影响。
所以问题之一是谷歌 gson在 JSON 中表示数字的方式。例如,int myInt = 2
将成为"myInt":2
,long myLong = 5432198765L
将成为"myLong":5432198765
,BigInteger 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 无缝协作的解决方法?
c++ - 任意精度小数运算 (C/C++) 中的浮点数与有理数
由于实现 AP 小数有两种方法,一种是模拟double
数据类型的存储和行为,仅使用更多字节,另一种是使用现有的整数 APA 实现将小数表示为有理数,即作为一对整数,分子和分母,这两种方法中哪一种更有可能在性能方面提供有效的算术?(内存使用确实是次要问题。)
我知道现有的 C/C++ 库,其中一些提供带有“浮点数”的分数 APA,而另一些则提供有理数(但是它们都没有定点 APA),当然我可以对依赖于“ float" 实现与使用合理实现的实现相比,但结果将在很大程度上取决于那些特定库的实现细节,我必须从近十个可用的库中随机选择。因此,我感兴趣的两种方法(如果考虑定点 APA,则为三种)更具理论上的优缺点。
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输入到它?
java - 任意精度的精确含义是什么?
对于某些人来说,这可能是一个非常简单的问题,但我想知道出现在BigInteger的 JavaDoc 第一行中的任意精度的含义:
不可变的任意精度整数。
c++ - 使用Windows的c ++中的任意精度?
有没有可以在windows中相对容易实现的库?不久前我做了一些函数,它们使用数字数组来获得所需的结果。当我有时间时,我可能会在他们那里工作。
但是是否有任何这样的功能已经可以很容易地实现到 c++ 中?
objective-c - 任意精度位操作(目标 C)
我需要对 Objective C 中任意精度数字的表示进行位操作。到目前为止,我一直在使用 NSData 对象来保存数字——有没有办法对这些内容进行位移?如果没有,是否有不同的方法来实现这一目标?