问题标签 [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 回答
252 浏览

bitwise-operators - 检查是否在 BigNum 上设置了位

我有一个格式化为这样的字符串的 bignum:“123456789123456789123456789”,我需要检查是否设置了指定的位。此字符串中的组件是个位数。

如果我想检查是否设置了第 54 位,通常我会这样做:NyNumber&(1<<54)

问题是我正在使用的 bignum 库中没有 AND 或 SHIFT。

所以问题是;如何检查一个位是否设置为格式为任意大小的字符串的数字?

编辑:澄清一下:我正在使用一种名为Autoit3的小型脚本语言和以下库:http : //www.autoitscript.com/forum/topic/83529-bignum-udf 将 BigNums 表示为字符串。

0 投票
3 回答
232 浏览

c - 如何事先确定无符号计算是否可能溢出?

作为一个个人项目,我正在为我的一个宠物项目实现任意精度数字类型。

我已经知道所有流行的、经过测试的和强大的库都可以做到这一点。我想将解决方案作为一个自我提升教育项目。

我正在研究该区域并试图弄清楚是否有某种方法可以在我实际进行计算之前粗略预测操作是否会导致溢出。我也不那么担心误报。

我希望能够使用适合计算的最小空间。如果计算将保持在其本机范围内,我将其保留在那里。

例如:Multiplying two 64 bit Integers if each are large enough will cause an overflow.我想检测到这一点,并且仅当结果可能超过 64 位分辨率时才将数字上转换为我的数字类型。在这个实验中,我将使用带符号的数字。

检测上溢/下溢的最理智、最有效的方法是什么?

0 投票
1 回答
625 浏览

c# - C#帮助中小数的任意精度?

这是我当前在 c# 中使用 chudnovsky 方法计算 Pi 的代码:

所以,我已经包含了 J# 库,并包含了 java.math。现在,当我用“BigDecimal”替换所有“double”时,会出现以下编译错误:

http://f.cl.ly/items/1r2X26470d0d0n260p0p/Image%202011-11-14%20at%206.16.19%20PM.png

我知道这不是我将 Int 用于循环的问题,因为它与 Doubles 完美配合。我的问题是,你如何解决这些与 int 和 BigDecimal 相关的错误,或者你能推荐另一个任意精度库吗?

我试过使用 XMPIR,一切都可以编译,但我得到:

http://f.cl.ly/items/1l3C371j2u3z3n2g3a0j/Image%202011-11-14%20at%206.20.24%20PM.png

所以我可以使用 p/invoke 来包含 xmpir 以便我可以使用 bigdecimal 类是什么?

感谢您的时间!

0 投票
3 回答
4714 浏览

c++ - 在 C++ 中处理任意长度的整数

有人能告诉我一个好的 C++ 库,用于处理(执行操作等)任意大的数字(它也可以是一个处理任意精度浮点数的库,但处理整数更重要)?

请仅参考您使用的库,并告诉我您是如何设法设置和获取它的,可能是一个非常简约的示例或其他东西(基本上,如果提到的库缺乏良好的文档,请提供您自己的一些输入)。

作为记录,我在 x64 机器上使用 Windows 7,CodeBlocks 作为我的 IDE,最新的 MinGW 作为编译器。

我试过的图书馆:

  • vlint(没有足够的操作,虽然适用于小东西)

  • bigint(易于设置,编译错误并且没有太多文档(可能从中衍生错误))

  • ttmath(似乎很有希望,编译了一些 BIG 示例程序并由于编译错误而运行了一些修复程序,由于几乎没有文档而导致语法难以理解)

  • gmp(甚至无法设置)

ps 删除了“问题的咆哮部分”,这基本上解释了为什么我要问一些在 Stackoverflow 上被问了很多次的东西,这样人们就会把它读到最后。

--> 更新

所以我选择了一个不是我最初问题的直接答案但对我解决这个问题有很大帮助的答案,我将发布我的一些发现来帮助像我这样的其他 c++ 新手开始使用非常大的数字而不会挣扎像我在一个简单的一步一步的微指南中所做的那样的图书馆。

我正在使用的东西(请记住这一点以遵循指南):

  • Windows 7 旗舰版 x64

  • Amd k10 x64(一些库不能使用它,其他库的行为会有所不同,其他库是定制为 amd k10 的,所以这不仅可以帮助您使用我使用的库,还可以帮助您使用其他库)

  • Code::Blocks 10.05不包含 MinGW 的版本,文件名“codeblocks-10.05-setup.exe”(安装在 C:\Program Files (x86)\CodeBlocks)

  • MinGW 软件包(binutils-2.15.91-20040904-1.tar.gz gcc-core-3.4.2-20040916-1.tar.gz gcc-g++-3.4.2-20040916-1.tar.gz mingw-runtime- 3.11.tar.gz w32api-3.8.tar.gz) 在 C:\MinGW 上提取

  • TTMath 0.9.2文件名“ttmath-0.9.2-src.tar.gz”解压缩并将文件夹“ttmath”复制到文件夹“C:\CPPLibs”(这是我将 c++ 库放入的文件夹)

怎么做才能设置好

  • 转到代码:块>设置>编译器和调试器(我的编译器在这里自动检测到。如果您没有发生这种情况,请在“选定编译器”上选择“GNU GCC编译器”并单击“设置为默认值”,然后单击“工具链” “编译器安装目录”上的可执行文件”,您可以选择编译器的安装目录或尝试自动检测”,然后在“C++ 编译器”上排序,选择或写入“mingw32-g++.exe”。如果发生这种情况,您只需执行这个,在“Selected Compiler”上选择“GNU GCC Compiler”并点击“Set as Default”)。

  • 不离开“代码:块>设置>编译器和调试器”并整理好上述内容,转到“搜索目录”,然后“编译器”单击“添加”并选择存储库的文件夹或放置“ ttmath”文件夹(在我的情况下是 C:\CPPLibs)然后转到“链接器”并做同样的事情。

  • 要开始使用“ttmath”库进行编码,您必须将此行放在#include <ttmath/ttmath.h>main 函数之前(注意:如果您使用 64 位系统,如果您不将此行放在此行之前,则会出现很多错误,#define TTMATH_DONT_USE_WCHAR #include <ttmath/ttmath.h>是与这个废话苦苦挣扎,直到我找到了其他也在苦苦挣扎的人找到并发布在网络上的修复程序,它对我有用)ps我认为它仅适用于64位系统,但如果你确实因为包含“ttmath”而出错.h" 头文件很可能是因为这个。

  • 必须像这样声明将具有大整数值的变量:ttmath::UInt<n> a,b,c;其中“a,b,c”是您的变量,“n”是您可以以这种形式存储在变量中的数字的大小“2 ^(32 *n)-1" 用于 32 位系统,这种形式 "2^(64*n)-1" 用于 64 位系统

  • 如果您这样做a = 333;(并且代替 333 的数字大于 C++ 上的“long int”标准数据类型),则为变量分配值将无法编译,因为将值分配给这样的变量独立于您之前指定的大小整数可以和 c++ 上的“long int”标准数据类型一样大(我自己想出了这个,很难),即使你使用一个更小的值并且它编译好然后你运行您的程序并尝试向该变量写入比上述“long int”标准数据类型可以处理的数字更大的数字,那么您的数学将是错误的,因此请注意:为变量赋值你必须像这样分配a = "333";(是的,我知道您几乎以这种方式将其视为字符串,但它可以很好地执行操作,没有任何问题,如果您决定“计算”变量,它将永远不会像您使用的那样是指数或科学记数法结果标准整数数据类型,无需加上一些“额外语句”来显示恰到好处的数字)

ps 使用这个简单的规则来处理整数和这个库,我用一个简单的程序(编码大约需要 3 分钟)在 15 到 20 秒内计算了第 100.000 个数字的斐波那契数,并且这个数字占用了 3 页,所以除了是实用的图书馆一旦你了解它是如何工作的(你以前几乎没有任何帮助,ttmath 网站的一些示例非常具有误导性,但现在你确实有一些帮助)它看起来也很有效,我确认第 100.000 个数字可能是正确的,因为我将大小(“n”)从 10000 增加到 50000,并且数字保留了大小,并且初始和最终数字相同。这是我使用的源代码,我用一个非常大的数字作为整数大小只是为了测试,我没有 t 实际上很想看看程序会在多长的范围内开始做错事,但我知道直到第 10.000 个斐波那契数的长度不会超过我定义的长度,因为在此之前我让程序“cout”每个结果直到它达到第 10.000 个并且它一直在增长。在我暂停程序之前,我还检查了序列的第一个数字,我看到“数字增长”并确认了序列的第一个斐波那契数字,它们是正确的。注意:此源代码只会显示您想知道的斐波那契数列的编号,如果您取消注释行,它只会显示“增长”的数字。

我还没有修改这个图书馆的任意精度浮点数,但是当我这样做时,如果我看到人们对它感兴趣,我将继续扩展本指南,感谢所有评论和答案。

0 投票
2 回答
4706 浏览

c++ - 非常非常大数的对数

我必须找到非常大的日志。

我在 C++ 中这样做

我已经做了一个乘、加、减、除的函数,但是对数有问题。我不需要代码,我需要一个简单的想法,如何使用这些函数来完成它。

谢谢。

PS对不起,我忘了告诉你:我只需要找到那个数字的二进制对

PS-2 我在Wikipedia中找到:

如果我在大数字下重新制作它,它会正常工作吗?

0 投票
2 回答
765 浏览

javascript - JavaScript Number 是任意精度的数字吗?

如果我用 JavaScript 编写数字文字1.34,它会告诉我它constructor的名字是Number. JavaScript 是否使用带有文字的任意精度算术?Number

0 投票
2 回答
1242 浏览

java - Java中的大整数运算 - 作业

所以这是一个家庭作业,我总共做了大约 10 个小时。我只是想要一些提示,看看我哪里出错了。所以我的任务基本上是为大整数制作一个计算器,我的教授提供了骨架。他要求我们编写的函数是减、除、乘、幂 (x^n) 和小于函数。我很确定我的 lessThan 和 multiply 函数可以正常工作,但也许不是,无论如何,我的工作如下,我将在之后描述我的问题:

我的减号功能似乎不起作用,出于某种原因,我不知道出了什么问题。x - y = x + (-y) 对我来说是有道理的,这是我认为我做的正确的。也许我的教授写的 plus 函数不能很好地工作?我试着考虑一下。我认为这个负函数是我的除法和幂函数不可或缺的。很抱歉我的笔记不清楚,但是有人可以看一下,并就我最重要的减号函数在哪里搞砸了,因为我认为一旦我让它正常工作,我就可以做到休息。

0 投票
2 回答
544 浏览

java - J2ME 中任意精度小数的替代方案

我们正在使用 J2ME 对遗留项目进行一些修改。到目前为止,十进制数被视为字符串,因为不需要算术运算。这些值仅显示为文本。

现在,需要任意精度的算术。如果它是 Java SE,我会使用BigDecimal,但它不存在于 MIDP/CLDC API 中。

我试图制定我的自定义 DecimalNumber 类,但是当我在单元测试中修复一些错误并发现新错误时,我意识到需要一些时间来使这个类坚如磐石并且没有错误。

那么,与其重新发明轮子,我可以为此目的重复使用哪些替代方案?例如,BigIntegerandBigDecimal类可以移植到 J2ME (CLDC1.1) 吗?我读过其他问题,有人试图用 bouncycastle 移植BigDecimalJavaSE BigInteger。这些兼容吗?

任何帮助将不胜感激。

0 投票
5 回答
192 浏览

java - 可以通过舍入避免 Java 浮点危害吗?

众所周知,当需要任意精度时,不使用 java 浮点原始值。Goetz 在他的优秀文章中解释了这个问题。

想象一下,我们需要在某个项目中实现任意精度,而我们没有BigDecimal类(因为它在 API 中不可用,例如:JavaME),也没有时间开发自定义实现。如果我们事先知道只需要相对较小的精度(2 到 4 位小数),是否可以使用 float 和 double 类型以及舍入函数实现 100% 可靠的紧急解决方法?如果是这样,可以使用 API 中的哪个函数?如果此功能不可用,但您仍然认为它可以解决问题,那么实现它会有多复杂?

0 投票
6 回答
828 浏览

python - Python计算错误

我正在使用 API mpmath 来计算以下总和

让我们考虑由以下定义的系列 u0、u1、u2:

该系列收敛于 2,但由于舍入问题,它似乎收敛于 2000。

我的代码:

我的坏结果:

我尝试使用其他一些功能(fdiv ...)或更改精度:同样的坏结果

这段代码有什么问题?

问题:如何更改我的代码以找到值 2.0 ??? 用公式:

联合国+1 = 2003 - 6002/联合国 + 4000/联合国联合国-1

谢谢