n乗根の計算で、例えば8の3乗根( \(\sqrt [ 3 ]{ 8 } =2\) )を計算するにはMathクラスのPowメソッドを用いて
Math.Pow(8.0, 1.0 / 3.0);
と、すれば答え 2 が求められます。
しかし、負の値のn乗根、例えば \(\sqrt [ 3 ]{ -8 }\)、を求めようと
Math.Pow(-8.0, 1.0 / 3.0);
とすると、答えは -2 を期待するところですが、C#ではNaNとなり、答えが求まりません。
しかし、負の値であっても、奇数乗根の場合は答えを求めたい。
という事で、こんなメソッドを作ってみました↓
private double NthRoot(double x, int n)
{
if (x >= 0)
{
// 通常のn乗根
return Math.Pow(x, 1.0 / (double)n);
}
else
{
if ((n % 2) != 0)
{
// 奇数乗根の場合
return -Math.Pow(-x, 1.0 / (double)n);
}
else
{
// 偶数乗根の場合
return double.NaN;
}
}
}
(参考)Math.Powメソッド
https://msdn.microsoft.com/ja-jp/library/system.math.pow(v=vs.110).aspx