我还在研究C++中任意长整数的例程.到目前为止,我已经为64位Intel CPU实现了加/减和乘法.
一切正常,但我想知道我是否可以通过使用SSE来加快速度.我浏览了SSE文档和处理器指令列表,但我找不到任何我认为可以使用的内容,原因如下:
SSE有一些整数指令,但大多数指令处理浮点.看起来它不是设计用于整数(例如,是否有较小的整数比较?)
SSE的想法是SIMD(相同的指令,多个数据),因此它提供了2或4个独立操作的指令.另一方面,我希望有一个像128位整数加(128位输入和输出)的东西.这似乎不存在.(但是?在AVX2中可能?)
整数加法和减法既不处理输入也不处理输出.因此,手动操作非常麻烦(因而也很慢).
我的问题是:我的评估是正确的还是有什么我忽略的?长整数例程可以从SSE中受益吗?特别是,它们可以帮助我编写更快的添加,子或mul例程吗?
我正在尝试实现BigInt并阅读了一些关于它的线程和文章,其中大多数建议使用更高的基数(256或2 ^ 32甚至2 ^ 64).
为什么更高的基数有利于此目的?
我有的其他问题是我应该如何将字符串转换为更高的基数(> 16).我读过没有标准的方法,除了base64.最后一个问题,我如何使用这些更高的基础.一些例子会很棒.
像 GMP 这样的任意精度库如何存储内存中表示的极大浮点数?
我会想象,例如,如果您想计算 Pi 或欧拉常数,例如 2,000,000 位数字,您将为小数点右侧的数字分配大量字节。每个字节将存储 2 个小数位值,并且该数组将是一个数据结构的成员,具有用于存储该值的位数和字节数。
这是它的工作原理吗?
c ×2
bigint ×1
biginteger ×1
bignum ×1
c++ ×1
gmp ×1
integer ×1
largenumber ×1
performance ×1
sse ×1