C# 如何实现大有理幂法
我正在使用C# 如何实现大有理幂法,c#,numerics,C#,Numerics,我正在使用BigRational的BCL Codeplex实现,但是它似乎没有一个Pow方法可以接受两个BigRational,只有一个方法可以接受一个BigRational和一个BigInteger。我想自己写一本,但我不知道从哪里开始。 编辑:一些代码: public static BigRational Pow(BigRational baseVal, BigRational exponent, int inputPrecision) { if (e
BigRational
的BCL Codeplex实现,但是它似乎没有一个Pow方法可以接受两个BigRational
,只有一个方法可以接受一个BigRational
和一个BigInteger
。我想自己写一本,但我不知道从哪里开始。
编辑:一些代码:
public static BigRational Pow(BigRational baseVal, BigRational exponent, int inputPrecision)
{
if (exponent == 0)
{
return BigRational.One;
}
if (exponent == 1)
{
return baseVal;
}
if (exponent.GetWholePart() == exponent)
{
return Pow(baseVal, exponent.GetWholePart());
}
baseVal = Round(baseVal, inputPrecision); //custom rounding method
exponent = Round(exponent, inputPrecision);
BigInteger exponentWhole = exponent.GetWholePart();
BigRational extra = exponent - exponentWhole;
return //what?
}
有理数在幂运算下不是封闭的,例如,2^(1/2)是无理的。问题本质上是“我不知道如何做一些不可能的事情”——假设你当然希望结果是一个大有理数。因为根据定义,没有人知道如何做不可能的事情,所以我认为你不会得到任何答案。如果您想要实现一个返回其他内容的Pow,那么请澄清这个问题。例如,您可以编写一个Pow实现,该实现返回一系列BigRational,其属性是每个后续成员都更接近reals中的结果。然后,用户可以迭代该序列,直到保证连续成员之间的差值始终小于给定的ε。这对你的目的来说够了吗?这样做的数学运算并不特别困难。不要介意传递一个参数以获得精度。