使用大于最大十进制值的数字

Jam*_*ing 3 c# precision

我正在使用前26个素数的乘积.这需要超过52位的精度,我相信这是double可以处理的最大值,并且超过了小数可以提供的28-29位有效数字.那么对于这么大的数字执行乘法和除法会有什么策略呢?

此外,对于实现这一目标,我必须跳过的任何箍都会对性能产生什么影响呢?

前22个素数的乘积(我可以在我的计算器上加倍,而不会进入科学模式)是:

10,642,978,845,819,148,849,204,664,294,430
Run Code Online (Sandbox Code Playgroud)

最后四个产品是

72,370,439
Run Code Online (Sandbox Code Playgroud)

当相乘时,我得到:

7.7023705133964511682328635583552e+38
Run Code Online (Sandbox Code Playgroud)

性能影响在这里尤其重要,因为我们基本上试图解决质数字符串比较解决方案在实践中是否比直接比较字符更快的问题.促使这项调查的帖子就在这里.处理器针对浮点计算进行了优化; 理想情况下,我希望在我最终得到的任何解决方案中充分利用这种优化.

TIA!
詹姆士

PS:我的代码是竞争解决方案; 我不认为素数解决方案可能会更快,但我试图给它最公平的机会.

Che*_*hen 6

您可以在C#4.0中使用BigInteger.对于旧版本,我认为您需要一个像这样的开源库