【发布时间】:2013-12-22 11:06:19
【问题描述】:
我必须计算 C 中两个大数的余数。一个大小为 938 或 256 位,另一个大小为 85 位。两者都不是 2^n 值!
我的基本想法是把每一位都作为一个短数组的一个元素,然后用基本的位运算来计算余数。但我不知道如何做到这一点。所以我希望这里有人可以帮助我。
对于那些感兴趣的人,我正在根据第 36 - 39 页的 UNISIG-SUBSET 036 http://www.era.europa.eu/Document-Register/Documents/Set-2-Index009-SUBSET-036%20v300.pdf 编写 ETCS - 编码器,并尝试计算校验位。
【问题讨论】:
-
也许使用MPIR 会是另一种选择?
-
有多个“长算术”库可用。您已经在 cmets 中建议使用 MPIR。我会提到 GMP(MPIR 确实是后者的分支,但您不太可能需要它的发明)。任何本土实施几乎都将做同样的事情,但效率较低。 OTOH 这些数字大小是在 Python 和 Erlang 中本地处理的,因此您可以在不附加额外库的情况下同时使用它们:)
-
你知道什么是“长除法”吗?
-
对每个位使用一个short 只是浪费空间和时间。有很多多精度数学库可用,例如 GMP,您可以使用它们
标签: c bit-manipulation division modulo