我已经用GMP编写了Toom乘法的实现。我测试了大约7000位数(23,000位)的2个数字的乘法,它运行得很好。然而,当我用70000位(230,000位)尝试它时,程序开始产生错误的答案。
我使用的是32位系统。 GMP可能会耗尽内存使用吗?我没有得到任何错误,所以我认为这不太可能。如果不是这种情况,我怀疑某处会有一些精度损失。
答案 0 :(得分:3)
通常,GMP使用“malloc and friends”在堆上分配数据。如果无法正确分配数据,则会调用标准abort()
函数(因此应简单地中止该过程),请参阅memory.c
:
ret = malloc (size);
if (ret == 0)
{
fprintf (stderr, "GNU MP: Cannot allocate memory (size=%lu)\n", (long) size);
abort ();
}
如果没有更多详细信息(请参阅我的评论),就无法分辨计算中出现的问题。