问题标签 [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.
c - 是否可以在一个 long int 变量中存储 2 个 32 位值?
我想将两个 32 位值存储在一个 long int 变量中。
您将如何在使用 C 的 32 位操作系统上执行此操作?是否可以将数据存储在单个 long long 变量中?如果是这样,那是怎么做的?
c - 存储和打印大于 2^64 的整数值
我正在尝试编写一个程序来查找梅森素数。使用 unsigned long long 类型,我能够确定第 9 个梅森素数的值,即 (2^61)-1。对于较大的值,我需要一种可以存储大于 2^64 的整数值的数据类型。
我应该能够使用这种数据类型的运算符,如*
, *=
,和。>
<
%
python - 如何阻止“ast.parse”将数值转换为整数/浮点数?
例如::
如何让解析器将 python 源文件转换为语法树,同时保留str
类型中节点的原始值?因为我需要使用尽可能精确的分数将例如 '1.2' 转换为精确值,而不会丢失任何精度(值 1.2 不能以浮点格式精确表示)。
最好我希望在不重新实现解析器的情况下这样做。ast
也许有其他解析器比模块更适合这个。
顺便说一句,我不仅需要解析表达式,还需要解析程序。
c++ - C++ 中 mpfr 变量动态数组的内存泄漏
我有一个简单的 C++ 程序,它使用多精度库 MPFR 来尝试理解更大程序中的内存问题:
这里的重点是声明不同大小的数组并使用任务管理器监控内存使用情况(我使用的是 Windows)。这适用于大小〜< 200,但如果我声明更大的东西,当我再次减小大小时,内存似乎不会被释放。
下面是一个示例运行:我启动程序并选择大小 50。然后我在 50、100、150 和 200 之间更改大小,并看到内存使用量按预期上下波动。然后我选择大小 250,内存使用量按预期上升,但是当我回到 200 时,它并没有减少,而是增加到类似于大小分别为 200 和 250 所需的内存值的总和。较大的尺寸也会出现类似的行为。
知道发生了什么吗?
assembly - 可以用imul指令执行多精度有符号乘法吗?
我正在编写一个函数库来为有符号整数类型s0128
, s0256
,和浮点类型, , s0512
,提供所有常规运算符和函数。s1024
f0128
f0256
f0512
f1024
我现在正在编写s0128
, s0256
, s0512
,s1024
乘法例程,但得到的错误结果让我感到困惑。我假设我可以用 64 位imul rcx
指令级联乘法(在 中产生 128 位结果rdx:rax
),就像我可以用指令对无符号操作数做同样的事情mul rcx
......但答案imul
是错误的。
我怀疑有一些技巧可以使这项工作,也许是混合imul
和mul
说明 - 或其他东西。或者是否有某种原因不能用有符号乘法指令实现更大的乘法?
因此,您了解该技术,我将描述s0128
操作数的最小版本。
每次代码将两个 64 位值相乘时,都会在edx:eax
. 每次代码生成一个 128 位结果时,它会将结果相加到一个 64 位寄存器的累加三元组中,其中包含addq
, adcq
,adcq
指令(其中最后一条adcq
指令仅加零以确保传播任何进位标志)。
s0128
当我将小负数乘以小正数作为测试时,结果为负数,但在 128 位结果中的高 64 位值的底部有一个或两个非零位。这对我来说意味着在多精度有符号乘法中的传播有些不太正确。
当然,级联对于s0256
, s0512
,来说要广泛得多s1024
。
我错过了什么?我必须将两个操作数都转换为无符号,执行无符号乘法,然后如果一个(但不是两个)操作数为负,则否定结果?或者我可以使用带imul
符号的乘法指令计算多精度结果吗?
c++ - 多精度库 zkcm 和 sizeof()
我正在使用多精度复数库( zkcm ) 并希望使用complex<double>
.
有一次,我尝试仔细检查变量的内存,sizeof()
但无论我将变量分配到多大的内存,我都会得到相同的答案 (32);即无论我在里面使用什么,以下代码段都会打印 32 zkcm_set_default_prec()
:
sizeof()
除了获取变量的内存大小之外,还有其他方法吗?
c - C中的多字加法
我有一个使用 GCC 的 C 程序,__uint128_t
这很棒,但现在我的需求已经超出了它。
对于 196 位或 256 位的快速算术,我有哪些选择?
我需要的唯一操作是加法(我不需要进位,即我将使用 mod 2 192或 2 256)。
速度很重要,所以如果可能的话,我不想转向一般的多精度。(其实我的代码在某些地方确实使用了多精度,但这是在关键循环中,会运行数百亿次。到目前为止,多精度只需要运行几万次。)
也许这很简单,可以直接编码,或者我需要找到一些合适的库。
你有什么建议,哦,Stack Overflow 很棒?
澄清: GMP 对我的需求来说太慢了。虽然我实际上在我的代码中使用了多精度,但它不在内部循环中并且运行不到 10 5次。热循环运行更像 10 12次。当我更改代码(增加大小参数)以使多精度部分比单精度部分运行得更频繁时,我的速度降低了 100 倍(我认为主要是由于内存管理问题,而不是额外的 µops )。我想把它降低到 4 倍或更好的速度。
c++ - boost::multiprecision::cpp_int:我想确认两个正 cpp_int 的除法会截断为零
我正在使用boost::multiprecision::cpp_int
,但我找不到两个正向cpp_int
截断的确认0
;即,那个
在 C++ 中,wereA
和B
内置integer
类型,标准要求截断到0
,因此答案将是C
equals 2
。
我假设它cpp_int
的工作方式相同 - 答案也2
适用于cpp_int
。
但是,我找不到这个假设的证实。我还在源代码中查找了几分钟boost::multiprecision::cpp_int
,但我发现确认该行为并非易事。
我想确认boost::multiprecision::cpp_int
在划分两个正整数时按预期工作 - 即,它将结果截断为0
.
谢谢!
c++ - 输入一个 128 位值 c++ boost
我int128_t
在 boost、多精度库中使用。
当我写的时候int128_t number = 265252859812191058636308480000000;
我有一个错误,那个常数太长了。
如何正确输入 128 位值?例如:
AF5228967057FE1CB84B92511BE89A47
在 int128_t 中?
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_int
POD 吗?
谢谢!