C#中的BigInteger部门

ser*_*0ne 11 .net c# biginteger division

我正在编写一个需要在C#中准确划分BigInteger类的类.

例:

BigInteger x = BigInteger.Parse("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
BigInteger y = BigInteger.Parse("2000000000000000000000000000000000000000000000000000000000000000000000000000000000000");

x /= y;

Console.WriteLine(x.ToString());

//Output = 0
Run Code Online (Sandbox Code Playgroud)

问题是作为一个整数,自然它不包含十进制值.我怎样才能克服这一点,得到0.5的实际结果(给出的例子).

PS解决方案必须能够准确地划分任何BigInteger,而不仅仅是示例!

Jep*_*sen 15

在上面的例子中,数字仍然很小,可以转换为double,所以在这种情况下你可以说

double result = (double)x / (double)y;
Run Code Online (Sandbox Code Playgroud)

如果x并且y对于一个double但仍然可比的太大,也许这个伟大的技巧是有帮助的:

double result = Math.Exp(BigInteger.Log(x) - BigInteger.Log(y));
Run Code Online (Sandbox Code Playgroud)

但总的来说,当BigInteger它们很大,并且它们的商数也很大时,如果不导入第三方库,这很难做到.


Ilm*_*uro 6

你需要什么准确度?一种方法是:

  • 将分子乘以1000比
  • 划分数字
  • 将结果转换为double除以1000

代码相同:

BigInteger x = BigInteger.Parse("1000000000000000000000000000000000000000000000000000000000000000000000000000000000000");
BigInteger y = BigInteger.Parse("2000000000000000000000000000000000000000000000000000000000000000000000000000000000000");

x *= 1000;
x /= y;
double result = (double)x;
result /= 1000;
Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)