问题标签 [multiprecision]

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 投票
3 回答
5659 浏览

c - 是否可以在一个 long int 变量中存储 2 个 32 位值?

我想将两个 32 位值存储在一个 long int 变量中。

您将如何在使用 C 的 32 位操作系统上执行此操作?是否可以将数据存储在单个 long long 变量中?如果是这样,那是怎么做的?

0 投票
6 回答
11788 浏览

c - 存储和打印大于 2^64 的整数值

我正在尝试编写一个程序来查找梅森素数。使用 unsigned long long 类型,我能够确定第 9 个梅森素数的值,即 (2^61)-1。对于较大的值,我需要一种可以存储大于 2^64 的整数值的数据类型。

我应该能够使用这种数据类型的运算符,如*, *=,和。><%

0 投票
2 回答
315 浏览

python - 如何阻止“ast.parse”将数值转换为整数/浮点数?

例如::

如何让解析器将 python 源文件转换为语法树,同时保留str类型中节点的原始值?因为我需要使用尽可能精确的分数将例如 '1.2' 转换为精确值,而不会丢失任何精度(值 1.2 不能以浮点格式精确表示)。

最好我希望在不重新实现解析器的情况下这样做。ast也许有其他解析器比模块更适合这个。

顺便说一句,我不仅需要解析表达式,还需要解析程序。

0 投票
1 回答
313 浏览

c++ - C++ 中 mpfr 变量动态数组的内存泄漏

我有一个简单的 C++ 程序,它使用多精度库 MPFR 来尝试理解更大程序中的内存问题:

这里的重点是声明不同大​​小的数组并使用任务管理器监控内存使用情况(我使用的是 Windows)。这适用于大小〜< 200,但如果我声明更大的东西,当我再次减小大小时,内存似乎不会被释放。

下面是一个示例运行:我启动程序并选择大小 50。然后我在 50、100、150 和 200 之间更改大小,并看到内存使用量按预期上下波动。然后我选择大小 250,内存使用量按预期上升,但是当我回到 200 时,它并没有减少,而是增加到类似于大小分别为 200 和 250 所需的内存值的总和。较大的尺寸也会出现类似的行为。

知道发生了什么吗?

0 投票
1 回答
776 浏览

assembly - 可以用imul指令执行多精度有符号乘法吗?

我正在编写一个函数库来为有符号整数类型s0128, s0256,和浮点类型, , s0512,提供所有常规运算符和函数。s1024f0128f0256f0512f1024

我现在正在编写s0128, s0256, s0512,s1024乘法例程,但得到的错误结果让我感到困惑。我假设我可以用 64 位imul rcx指令级联乘法(在 中产生 128 位结果rdx:rax),就像我可以用指令对无符号操作数做同样的事情mul rcx......但答案imul是错误的。

我怀疑有一些技巧可以使这项工作,也许是混合imulmul说明 - 或其他东西。或者是否有某种原因不能用有符号乘法指令实现更大的乘法?


因此,您了解该技术,我将描述s0128操作数的最小版本。

每次代码将两个 64 位值相乘时,都会在edx:eax. 每次代码生成一个 128 位结果时,它会将结果相加到一个 64 位寄存器的累加三元组中,其中包含addq, adcq,adcq指令(其中最后一条adcq指令仅加零以确保传播任何进位标志)。

s0128当我将小负数乘以小正数作为测试时,结果为负数,但在 128 位结果中的高 64 位值的底部有一个或两个非零位。这对我来说意味着在多精度有符号乘法中的传播有些不太正确。

当然,级联对于s0256, s0512,来说要广泛得多s1024

我错过了什么?我必须将两个操作数都转换为无符号,执行无符号乘法,然后如果一个(但不是两个)操作数为负,则否定结果?或者我可以使用带imul符号的乘法指令计算多精度结果吗?

0 投票
2 回答
70 浏览

c++ - 多精度库 zkcm 和 sizeof()

我正在使用多精度复数库( zkcm ) 并希望使用complex<double>.

有一次,我尝试仔细检查变量的内存,sizeof()但无论我将变量分配到多大的内存,我都会得到相同的答案 (32);即无论我在里面使用什么,以下代码段都会打印 32 zkcm_set_default_prec()

sizeof()除了获取变量的内存大小之外,还有其他方法吗?

0 投票
2 回答
906 浏览

c - C中的多字加法

我有一个使用 GCC 的 C 程序,__uint128_t这很棒,但现在我的需求已经超出了它。

对于 196 位或 256 位的快速算术,我有哪些选择?

我需要的唯一操作是加法(我不需要进位,即我将使用 mod 2 192或 2 256)。

速度很重要,所以如果可能的话,我不想转向一般的多精度。(其实我的代码在某些地方确实使用了多精度,但这是在关键循环中,会运行数百亿次。到目前为止,多精度只需要运行几万次。)

也许这很简单,可以直接编码,或者我需要找到一些合适的库。

你有什么建议,哦,Stack Overflow 很棒?

澄清: GMP 对我的需求来说太慢了。虽然我实际上在我的代码中使用了多精度,但它不在内部循环中并且运行不到 10 5次。热循环运行更像 10 12次。当我更改代码(增加大小参数)以使多精度部分比单精度部分运行得更频繁时,我的速度降低了 100 倍(我认为主要是由于内存管理问题,而不是额外的 µops )。我想把它降低到 4 倍或更好的速度。

0 投票
2 回答
923 浏览

c++ - boost::multiprecision::cpp_int:我想确认两个正 cpp_int 的除法会截断为零

我正在使用boost::multiprecision::cpp_int,但我找不到两个正向cpp_int截断的确认0;即,那个

在 C++ 中,wereAB内置integer类型,标准要求截断到0,因此答案将是Cequals 2

我假设它cpp_int的工作方式相同 - 答案也2适用于cpp_int

但是,我找不到这个假设的证实。我还在源代码中查找了几分钟boost::multiprecision::cpp_int,但我发现确认该行为并非易事。

我想确认boost::multiprecision::cpp_int在划分两个正整数时按预期工作 - 即,它将结果截断为0.

谢谢!

0 投票
1 回答
1271 浏览

c++ - 输入一个 128 位值 c++ boost

int128_t在 boost、多精度库中使用。

当我写的时候int128_t number = 265252859812191058636308480000000; 我有一个错误,那个常数太长了。

如何正确输入 128 位值?例如:

AF5228967057FE1CB84B92511BE89A47在 int128_t 中?

0 投票
2 回答
284 浏览

c++ - boost::multiprecision::cpp_int 是 POD 吗?

我打算使用具有boost::multiprecision::cpp_int参见 Boost Multiprecision)作为数据成员的类,并且我希望使用boost::fast_pool_allocator Boost custom allocator在堆上管理这些类的实例。

为了安全起见,我需要知道它boost::multiprecision::cpp_int是一个 POD(或者至少它没有在堆上分配 - 即纯粹基于堆栈)。

boost::multiprecision::cpp_intPOD 吗?

谢谢!