将1除以一个巨大的整数

时间:2011-07-20 15:54:35

标签: algorithm floating-point opencl

我必须将1除以存储在字符串中的超过4000位的数字X,显然这将返回浮点数。我正在寻找算法来有效地执行这种划分,但我找不到任何让我信服的东西。

作为旁注,我想在不使用第三方库的情况下自己实现算法。

任何人都有任何想法?

谢谢!

修改: 我之所以不想使用第三方库,是因为我想使用openCL进行此操作,但不会在此过程中失去太多准确性。因此,在这种情况下,实际上不可能使用其中一个库。

4 个答案:

答案 0 :(得分:10)

您正在描述一个特殊的除法案例,称为反转数字。这是一篇论文,它描述了Picarte迭代一个大整数的迭代方法:http://www.dcc.uchile.cl/~cgutierr/ftp/picarte.pdf

答案 1 :(得分:2)

您应该查看GNU Multiple Precision Arithmetic Library,它对所处理数字的大小没有限制,并且显然会有非常好的数字运算算法。

至于自己实施,如果不是出于教育目的,我会说不要成为NIH综合症的牺牲品!在binary arithmetic上进行网络搜索应该提供丰富的文档......

答案 2 :(得分:1)

您应该使用System.Numerics.BigInteger结构,它允许您进行大量计算,但它只能在.NET 4.0中使用

答案 3 :(得分:1)

如果你的数字X是一个整数,你很可能无法做到你想要的。 floatdouble几乎完全没有了;你必须使用long double。在某些平台上,long double只是double

如果你不想使用第三方bignum软件包(为什么?),你必须自己实现除法算法(这几乎要求你开发一个很好的块bignum包)。