首页 > 解决方案 > 用浮点/双精度表示非常大的数字

问题描述

我想在应用程序(增量游戏)中显示非常大的数字。指数可以大于 100,000(十万),因此doublefloat将满足它们的限制。我知道BigInteger类型,但我读到它可能很慢,而且我不需要超过 5 位的有效位精度,所以它可能不是一个好的选择

一个数字的示例可以是 1.2345*10^100000。在这种情况下,我不关心第 5 位之后的任何小数(5-15 位精度之间的任何地方都可以)

我需要在 30 毫秒的循环中对数字执行多项操作(乘法、加法、幂、对数),所以它应该很快。我怎样才能以一种好的方式做到这一点?是否有任何图书馆或者我需要自己制作?

如果我可以用不同的符号表示数字,例如科学、工程、字母、标准(百万、十亿、...、septillion、octillion、nonillion)等,那也很棒。

标签: c#

解决方案


我不知道是否已经有一个库,但是您可以尝试为 LargeNumbers 编写自己的类:

class LargeNumber
{
    double Value;
    int Mantissa;
}

然后你可以覆盖加法、乘法运算符等。
当然你必须在那里做一些数学运算

编辑: 是的,你必须知道指数是如何工作的,这不是微不足道的,但也不是太难。

加法运算的一些数学示例,在以下情况下:
firstNumber.Mantissa> secondNumber.Mantissa> 0:

...
var expDifference = firstNumber.Mantissa - secondNumber.Mantissa;
if(expDifference > 5)
{
   return firstNumber;
}
if(expDifference < 5)
{
   return new LargeNumber
   {
       Value = firstNumber.Value*(10^expDifference) + secondNumber.Value,
       Mantissa= firstNumber.Mantissa
   }
}
...

推荐阅读