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

c++ - C++/Haskell 中的精确算术和惰性列表性能

在阅读了这篇论文这篇论文之后,我最近遇到了精确实数算术这个主题。

我发现许多论文讨论了使用有符号数字流实现精确算术。对任意精度使用无限流可以在函数式语言(如 Haskell)中使用惰性列表实现很好的实际实现。然而,在函数式语言中讨论此类实现的论文似乎得出的结论是性能非常差。

现在,我意识到与标准浮点表示相比,精确的非硬件实现通常具有相对较差的性能,但我有兴趣以命令式语言(特别是 C++)和一组操作提供更有效的实现/functions(算术运算、三角函数、exp、log 等)。

我的问题:有符号数字/惰性流表示是否存在固有的缓慢导致性能不佳的问题,或者是 Haskell?是什么让它变慢?是否有可能在 C++ 中使用惰性流实现有符号数字流表示,从而实现(显着)比其 Haskell 对应物更好的性能,或者这是徒劳的练习?也许重建为迭代?

我知道有两个 C++ 库 RealLib 和 iRRAM 可以实现高效的实数计算。但是,这些似乎使用区间算术,将实数表示为缩小的嵌套区间,这似乎不像无限流那样“纯”一种方法(如果您不同意,请纠正我!)。但也许这些是实现良好效率的唯一方法?

任何输入表示赞赏!

0 投票
2 回答
598 浏览

integer - 使用类整数数据类型实现小数/任意算术

这可能以前可能被问过,但我找不到任何相关的东西。

通过任意/固定数量的整数的专用类或结构来实现一种任意/十进制算术是否有可能/性能?

让我澄清一下;浮动(据我了解),使用尾数,指数,也许还有一个符号位。它们能够表示 1/2、1/4、1/8 等……但不能表示 1/10。

我的建议是这样的:让数字由一个普通的intint64_t一系列的数字表示,只保留不超过 10 次方的值,完全被整数范围覆盖(所以对于 32 位 int,限制为 10^8-1)。这只是为了保持计算容易。再加上一个指数,这将说明它应该乘以十的幂才能得到实数。

例如:125.36 将表示为int等于 12536 和十的幂等于 -2。这个数字实际上会占用太多ints 和一堆特殊功能。

另一个例子:4,294,967,297(即 2^32+1)需要两个ints,一个等于 4,另一个等于 294,967,297,十的幂等于 0。

这是一个好主意,为了更简单/更快的算术而丢弃所有这些内存吗?我还没有完全考虑过溢出部分,也许计算int32_t+int32_t=int64_t会很好地解决这个问题?

0 投票
0 回答
240 浏览

objective-c - 目标 c 中的 BigInteger

可能重复:
Objective-c 上的 biginteger

目标c中是否有任何用于任意大小整数的NS*类,例如C#中的BigInteger?如果没有,gmp 是一个很好的导入库还是有更好的库/方式?我需要的操作是加法、减法、乘法和除法(带截断)。内存是这个应用程序的一个大问题,因此使用最少内存的应用程序将是最好的。只要每次操作不需要数年,运行时间就不是问题。

0 投票
3 回答
1028 浏览

c++ - 使用 GMP 的任意精度算术

我正在使用 GMP 库制作一个 Pi 程序,它将计算大约 7 万亿位数的 Pi。问题是,我不知道需要多少位来保存那么多小数位。

0 投票
1 回答
776 浏览

embedded - 用于 16 位处理器的任意精度算术 (Bignum)

我正在为 16 位嵌入式设备(80251 微控制器)开发应用程序,我需要任意精度的算术。有人知道适用于 8051 或 80251 的库吗?

GMP 没有明确支持 8051,我对在 16 位设备上可能遇到的问题持谨慎态度。

谢谢

0 投票
2 回答
2251 浏览

javascript - JavaScript 打包整数并计算任意精度浮点数:

我需要在 JavaScript 中执行以下操作,但迄今为止无法找到无缝执行此操作的解决方案:

  • 以特定顺序获取两个整数并像 Python 的 struct 模块一样打包它们。
  • 这个打包的值,(支持与主机不同的字节顺序的奖励)将转换为 64 位浮点数(双精度)。它们必须是任意的,因此我可能会得到整数的指数表示(例如,它们可能是 0xdeadbeef 和 500):

    exp 形式:1.0883076389305e-311 1.0883076389305000 * 10 ^ - 311

  • 我需要将其转换为任意精度、非指数形式,因此:

    0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000108830763893050000000000000000000000000000000000000000000000000000000000000000000000000000

  • 该数字转换为字符串:)

我还没有找到一种在 Javascript 中执行此操作的方法,我必须输出一些必须支持任意精度的数字,或者至少支持双精度的 1024 指数(或者说 400)。

谢谢!!

注意:我确实需要“打包/解包”来忠实地表示这两个数字转换为双精度/64 位浮点数。但我不关心,比如说,导出到字符串或原始缓冲区。只要我为 double 获得任意精度的 double 表示,一切都很好。

0 投票
1 回答
482 浏览

python - Python 本机任意精度

有没有办法编译 Python 的解释器,使其可以使用本机(c)任意精度库,以便 Python 可以像使用普通数字一样使用任意精度,而不必使用小数类?

例如。

0 投票
5 回答
19080 浏览

python - numpy 任意精度线性代数

我有一个 numpy 2d 数组 [中/大型 - 比如说 500x500]。我想找到它的元素指数的特征值。问题是某些值是非常负的(-800、-1000 等),并且它们的指数下溢(意味着它们非常接近于零,因此 numpy 将它们视为零)。无论如何在numpy中使用任意精度?

我梦想的方式:

我用 gmpy 和 mpmath 寻找解决方案无济于事。任何想法都会受到欢迎。

0 投票
2 回答
5044 浏览

php - PHP中的任意精度数学

我目前正在尝试弄清楚如何在 PHP 中使用任意精度的数字。所以我想我的第一个问题是什么是任意精度数学。我试着用谷歌搜索一个好的定义,但由于某种原因,没有人能用足够简单的词来表达。

二、PHP中的BCMath和GMP库有什么区别?我听说 GMP 的 API 是“更新鲜的”,但 idk。一个更好吗?

我的最后一个问题是 BCMath/GMP 需要什么类型的数字。显然它采用字符串形式的普通整数(例如“5.34”),但我已经看到 BCMath 函数直接与表示常规整数的八位字节字符串一起使用的实现(例如“\x12\x23\x45\x67”),我'听说被称为“bigint”,但谷歌再次对我没有任何帮助。

0 投票
2 回答
2685 浏览

visual-c++ - MSVC++“官方”任意精度库

我正在寻找一个 MSVC++ 特定的任意精度库。因为我的工作不需要跨平台兼容性,所以我宁愿不要把这一切搞得一团糟。

我尝试查看NTL,但在看到诸如“这些步骤适用于 MSVC++ v6 ”之类的声明时,我不禁在精神上将其视为过时的内容。最新版本: 2009 08 14.

MPIR看起来很有前途(最新版本2011 06 14),它是我迄今为止发现的最好的东西。

对于从 MSVC++(本机代码,而不是 .NET)进行至少128 位浮点运算的任何建议?