我必须将1除以存储在字符串中的超过4000位的数字X,显然这将返回浮点数。我正在寻找算法来有效地执行这种划分,但我找不到任何让我信服的东西。
作为旁注,我想在不使用第三方库的情况下自己实现算法。
任何人都有任何想法?
谢谢!
修改: 我之所以不想使用第三方库,是因为我想使用openCL进行此操作,但不会在此过程中失去太多准确性。因此,在这种情况下,实际上不可能使用其中一个库。
答案 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是一个整数,你很可能无法做到你想要的。 float
和double
几乎完全没有了;你必须使用long double
。在某些平台上,long double
只是double
。
如果你不想使用第三方bignum软件包(为什么?),你必须自己实现除法算法(这几乎要求你开发一个很好的块bignum包)。