我正在尝试在C中实现一个程序,该程序使用fft和二进制拆分方法计算非常大的 n(最多一百万)的阶乘。
我已经实现了一个简单的库来表示任意精度整数。为了计算fft和ifft,我使用了“ C 中的数字食谱”中的twofft.c和four1.c例程
直到某个 n,一切正常,但是当数字(浮动数组)太大时,ifft(用four1计算)在归一化和四舍五入之后有错误的值。
例如,如果我有两个以 40 个零结尾的 2000 位数字,并且我必须将它们相乘(使用 fft),当我计算 ifft 时,一些结尾的零变成“一”。发生这种情况是因为当我将其中一个“零”(例如 0,50009)四舍五入时,它们变成了“一”。现在,我不知道我的实现是否错误,或者我是否必须以不同的方式四舍五入这个数字。我尝试使用二元拆分方法和素数分解,但是对于n >= 9000,结果是错误的。
有办法解决这个问题吗?感谢您的关注,并为我糟糕的英语感到抱歉。