【C#】ルート(平方根)の求め方|Math.Sqrtの使い方とエラー対策を初心者向けに解説
はじめに
C#で「ルート」を計算したいときは、基本的にMath.Sqrtメソッドを使います。
ルートとは平方根のことで、たとえば「9のルート」は「3」です。これは、3 × 3 = 9 になるためです。C#では、この平方根の計算を自分で複雑に実装する必要はなく、標準で用意されているMath.Sqrtを使えば簡単に求められます。
ただし、初心者の方がC#でルート計算をするときには、いくつかつまずきやすいポイントがあります。
たとえば、Math.Sqrtの戻り値はintではなくdoubleになること、負の数を渡すとエラーではなくNaNになること、整数として結果を受け取りたい場合にはキャストや丸め処理が必要になることなどです。
この記事では、C#でルートを求める基本から、Math.Sqrtの使い方、型変換、エラー対策、実用例、さらに3乗根やn乗根を求める方法まで、初心者向けにわかりやすく解説します。
1. C#でルート(平方根)を求める基本
1-1. ルート(平方根)とは何か
ルートとは、数学でいう「平方根」のことです。
平方根とは、ある数を2乗したときに元の数になる値を指します。
たとえば、次のようになります。
C#3 × 3 = 9
この場合、9の平方根は3です。
数学では次のように表します。
√9 = 3
他にも、次のような例があります。
√4 = 2
√16 = 4
√25 = 5
C#でこのような平方根を求めたい場合に使うのが、Math.Sqrtです。
1-2. C#ではMath.Sqrtを使う
C#でルートを求めるには、Math.Sqrtメソッドを使います。
Sqrtは「Square Root」の略で、「平方根」という意味です。
基本的な使い方は次のとおりです。
C#double result = Math.Sqrt(9);
Console.WriteLine(result);
実行結果は次のようになります。
3
Math.Sqrt(9)と書くことで、「9の平方根」を計算できます。
C#では、数学関数の多くがMathクラスに用意されています。平方根だけでなく、べき乗、絶対値、三角関数などもMathクラスから利用できます。
1-3. Math.Sqrtで計算できる値と戻り値の型
Math.Sqrtに渡せる値は、基本的にdouble型の数値です。
ただし、int型の整数を渡しても、自動的にdouble型として扱われるため、次のようなコードも問題なく動作します。
C#double result = Math.Sqrt(16);
Console.WriteLine(result);
実行結果は次のとおりです。
4
重要なのは、Math.Sqrtの戻り値は必ずdouble型になるという点です。
たとえば、次のようにint型の変数に直接代入しようとするとエラーになります。
C#int result = Math.Sqrt(16); // エラー
これは、Math.Sqrt(16)の結果がdouble型だからです。
正しくは次のように書きます。
C#double result = Math.Sqrt(16);
1-4. この記事で解決できること
この記事では、C#でルートを計算するときによくある疑問を解決します。
Math.Sqrtの基本的な使い方だけでなく、整数や小数を使った計算、変数を使った計算、計算結果の丸め方、負の数を渡したときの対策、型変換エラーの解決方法などを順番に解説します。
また、実際のプログラムでよく使われる「2点間の距離を求める処理」や「配列の各値に対して平方根を求める処理」も紹介します。
C#でルート計算を使いたい初心者の方は、まずMath.Sqrtの基本を押さえることが大切です。
2. Math.Sqrtの基本的な使い方
2-1. Math.Sqrtの構文
Math.Sqrtの基本構文は次のとおりです。
C#Math.Sqrt(数値)
戻り値を変数に保存する場合は、次のように書きます。
C#double result = Math.Sqrt(数値);
たとえば、25の平方根を求める場合は次のようになります。
C#double result = Math.Sqrt(25);
Math.Sqrtは計算結果を返すメソッドです。そのため、計算しただけでは画面に表示されません。結果を確認したい場合は、Console.WriteLineを使って表示します。
C#double result = Math.Sqrt(25);
Console.WriteLine(result);
2-2. ルートを求める基本サンプルコード
C#でルートを求める基本的なサンプルコードは次のとおりです。
C#using System;
class Program
{
static void Main()
{
double result = Math.Sqrt(9);
Console.WriteLine(result);
}
}
実行結果は次のようになります。
3
このコードでは、Math.Sqrt(9)によって9の平方根を求めています。
計算結果はdouble型の変数resultに代入され、Console.WriteLineで画面に表示されます。
別の数値を使いたい場合は、Math.Sqrtの中に入れる値を変更します。
C#double result = Math.Sqrt(64);
Console.WriteLine(result);
実行結果は次のようになります。
8
2-3. using Systemは必要か
MathクラスやConsoleクラスは、System名前空間に含まれています。
そのため、通常はファイルの先頭に次のように書きます。
C#using System;
これを書くことで、次のように短く書けます。
C#double result = Math.Sqrt(36);
Console.WriteLine(result);
もしusing System;を書かない場合は、次のように完全修飾名で書く必要があります。
C#double result = System.Math.Sqrt(36);
System.Console.WriteLine(result);
どちらも動作しますが、初心者のうちはusing System;を書いておくとコードが読みやすくなります。
なお、最近のC#プロジェクトでは、テンプレートによって暗黙的なusingが有効になっている場合があります。その場合、using System;を書かなくてもMathやConsoleが使えることがあります。
ただし、学習中は仕組みを理解するためにも、サンプルコードではusing System;を明示しておくとわかりやすいです。
2-4. 実行結果の確認方法
C#のコンソールアプリで計算結果を確認するには、Console.WriteLineを使います。
C#double result = Math.Sqrt(49);
Console.WriteLine(result);
実行結果は次のとおりです。
7
複数の値を確認したい場合は、次のように書けます。
C#Console.WriteLine(Math.Sqrt(4));
Console.WriteLine(Math.Sqrt(9));
Console.WriteLine(Math.Sqrt(16));
Console.WriteLine(Math.Sqrt(25));
実行結果は次のようになります。
2
3
4
5
文字と一緒に表示したい場合は、文字列補間を使うと便利です。
C#double number = 81;
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
実行結果は次のようになります。
81の平方根は9です。
3. 整数・小数・変数を使って平方根を求める方法
3-1. int型の値をMath.Sqrtに渡す場合
Math.Sqrtにはint型の値も渡せます。
C#int number = 100;
double result = Math.Sqrt(number);
Console.WriteLine(result);
実行結果は次のとおりです。
10
numberはint型ですが、Math.Sqrtに渡すときにdouble型として扱われます。
つまり、次のようなイメージです。
C#double result = Math.Sqrt(100.0);
ただし、戻り値はdouble型なので、結果を受け取る変数はdoubleにする必要があります。
次のコードはエラーになります。
C#int number = 100;
int result = Math.Sqrt(number); // エラー
正しくは次のように書きます。
C#int number = 100;
double result = Math.Sqrt(number);
3-2. double型の小数を使う場合
Math.Sqrtでは、小数の平方根も求められます。
C#double number = 2.25;
double result = Math.Sqrt(number);
Console.WriteLine(result);
実行結果は次のようになります。
1.5
小数をそのまま渡すこともできます。
C#Console.WriteLine(Math.Sqrt(0.25));
Console.WriteLine(Math.Sqrt(2.0));
実行結果は次のようになります。
0.5
1.4142135623730951
平方根の結果が割り切れない場合は、小数が長く表示されることがあります。
たとえば、2の平方根は正確には有限小数で表せないため、C#では近似値として表示されます。
C#double result = Math.Sqrt(2);
Console.WriteLine(result);
実行結果の例は次のとおりです。
1.4142135623730951
3-3. 変数に代入して平方根を計算する場合
実際のプログラムでは、Math.Sqrt(9)のように直接数値を書くよりも、変数に入れた値を使うことが多いです。
C#double number = 144;
double result = Math.Sqrt(number);
Console.WriteLine(result);
実行結果は次のようになります。
12
変数を使うと、入力値や計算途中の値に対して平方根を求められます。
C#double width = 3;
double height = 4;
double diagonal = Math.Sqrt(width * width + height * height);
Console.WriteLine(diagonal);
実行結果は次のとおりです。
5
この例では、横の長さが3、縦の長さが4の直角三角形について、斜辺の長さを求めています。
3-4. 計算結果を変数に保存する方法
Math.Sqrtの計算結果は、double型の変数に保存するのが基本です。
C#double result = Math.Sqrt(121);
保存した結果は、後続の処理で使えます。
C#double number = 121;
double root = Math.Sqrt(number);
double doubled = root * 2;
Console.WriteLine(root);
Console.WriteLine(doubled);
実行結果は次のようになります。
11
22
このように、平方根を求めた結果を別の計算に使うこともできます。
結果をすぐ表示するだけなら、変数に保存せずに次のように書くこともできます。
C#Console.WriteLine(Math.Sqrt(121));
ただし、あとで結果を使う場合や、コードを読みやすくしたい場合は、変数に保存する書き方がおすすめです。
4. Math.Sqrtを使うときの注意点
4-1. Math.Sqrtの戻り値はdouble型になる
Math.Sqrtを使うときに最も重要なのは、戻り値がdouble型になることです。
たとえば、次のコードを見てください。
C#var result = Math.Sqrt(16);
この場合、resultの型はdoubleになります。
16は整数ですが、Math.Sqrt(16)の結果はdouble型です。
そのため、次のようにint型に直接代入することはできません。
C#int result = Math.Sqrt(16); // エラー
C#では、doubleからintへの変換は自動では行われません。小数点以下の情報が失われる可能性があるためです。
4-2. int型に代入するときはキャストが必要
Math.Sqrtの結果をint型で受け取りたい場合は、キャストが必要です。
C#double root = Math.Sqrt(16);
int result = (int)root;
Console.WriteLine(result);
実行結果は次のようになります。
4
直接キャストすることもできます。
C#int result = (int)Math.Sqrt(16);
Console.WriteLine(result);
ただし、キャストは小数点以下を切り捨てる点に注意してください。
C#int result = (int)Math.Sqrt(10);
Console.WriteLine(result);
実行結果は次のようになります。
3
Math.Sqrt(10)は約3.162277...ですが、intにキャストすると小数点以下が切り捨てられて3になります。
四捨五入したい場合は、単純なキャストではなくMath.Roundを使います。
4-3. 小数点以下を丸めたい場合の対処法
平方根の結果を丸めたい場合は、目的に応じてメソッドを使い分けます。
四捨五入したい場合はMath.Roundを使います。
C#double result = Math.Sqrt(10);
double rounded = Math.Round(result, 2);
Console.WriteLine(rounded);
実行結果は次のようになります。
3.16
小数点以下を切り捨てたい場合はMath.Floorを使います。
C#double result = Math.Sqrt(10);
double floor = Math.Floor(result);
Console.WriteLine(floor);
実行結果は次のとおりです。
3
小数点以下を切り上げたい場合はMath.Ceilingを使います。
C#double result = Math.Sqrt(10);
double ceiling = Math.Ceiling(result);
Console.WriteLine(ceiling);
実行結果は次のとおりです。
4
それぞれの違いは次のとおりです。
Math.Round 四捨五入
Math.Floor 切り捨て
Math.Ceiling 切り上げ
整数として扱いたい場合は、丸め処理のあとに必要に応じてintへ変換します。
C#int rounded = (int)Math.Round(Math.Sqrt(10));
Console.WriteLine(rounded);
4-4. decimal型を使いたい場合の注意点
C#にはdecimal型があります。decimal型は、金額計算などでよく使われる高精度な10進数型です。
しかし、Math.Sqrtはdecimal型を直接受け取るメソッドではありません。
次のコードはそのままでは使えません。
C#decimal number = 25m;
decimal result = Math.Sqrt(number); // エラー
Math.Sqrtを使う場合は、decimalをdoubleに変換する必要があります。
C#decimal number = 25m;
double result = Math.Sqrt((double)number);
Console.WriteLine(result);
実行結果は次のようになります。
5
ただし、decimalからdoubleに変換すると、精度の扱いが変わる可能性があります。
金額計算のように厳密な10進数の精度が重要な場面では、doubleへ変換してよいかを慎重に判断しましょう。
ルート計算では多くの場合、結果が無理数になるため、完全に正確な小数として扱うことはできません。C#のMath.Sqrtの結果も近似値として扱うのが基本です。
5. 負の数をMath.Sqrtに渡したときのエラー対策
5-1. 負の数の平方根はNaNになる
Math.Sqrtに負の数を渡すと、通常の数値ではなくNaNが返ります。
C#double result = Math.Sqrt(-1);
Console.WriteLine(result);
実行結果は次のようになります。
NaN
NaNは「Not a Number」の略で、「数値ではない」という意味です。
C#のMath.Sqrtでは、負の数を渡しても例外が発生するわけではありません。エラーでプログラムが止まるのではなく、計算結果としてNaNが返ります。
そのため、負の数が入力される可能性がある場合は、NaNを判定したり、事前に負の数をチェックしたりする必要があります。
5-2. double.NaNとは何か
double.NaNは、double型で表される特殊な値です。
「数値ではない結果」を表すために使われます。
たとえば、次のような計算ではNaNになることがあります。
C#double result = Math.Sqrt(-9);
Console.WriteLine(result);
実行結果は次のとおりです。
NaN
注意点として、NaNは通常の比較では正しく判定できません。
たとえば、次のような書き方はおすすめできません。
C#double result = Math.Sqrt(-9);
if (result == double.NaN)
{
Console.WriteLine("NaNです");
}
NaNかどうかを判定するときは、double.IsNaNを使います。
5-3. double.IsNaNで判定する方法
Math.Sqrtの結果がNaNかどうかを判定するには、double.IsNaNを使います。
C#double result = Math.Sqrt(-9);
if (double.IsNaN(result))
{
Console.WriteLine("計算結果はNaNです。");
}
else
{
Console.WriteLine(result);
}
実行結果は次のようになります。
計算結果はNaNです。
double.IsNaN(result)は、resultがNaNの場合にtrueを返します。
負の数が入力される可能性があるプログラムでは、計算後にNaN判定を入れておくと安全です。
5-4. if文で負の数を事前にチェックする方法
負の数をMath.Sqrtに渡したくない場合は、計算前にif文でチェックする方法がわかりやすいです。
C#double number = -4;
if (number < 0)
{
Console.WriteLine("負の数の平方根は計算できません。");
}
else
{
double result = Math.Sqrt(number);
Console.WriteLine(result);
}
実行結果は次のようになります。
負の数の平方根は計算できません。
入力値を扱うプログラムでは、このように事前チェックを入れることが大切です。
C#Console.Write("数値を入力してください: ");
double number = double.Parse(Console.ReadLine());
if (number < 0)
{
Console.WriteLine("0以上の数値を入力してください。");
}
else
{
double result = Math.Sqrt(number);
Console.WriteLine($"平方根は{result}です。");
}
このように書けば、負の数が入力されたときに不正な計算を避けられます。
5-5. 例外処理で安全に計算する方法
Math.Sqrt自体は、負の数を渡しても例外を投げずにNaNを返します。
しかし、自分でメソッドを作って「負の数が渡されたら例外にする」という設計にすることはできます。
C#using System;
class Program
{
static void Main()
{
try
{
double result = SafeSqrt(-9);
Console.WriteLine(result);
}
catch (ArgumentOutOfRangeException ex)
{
Console.WriteLine(ex.Message);
}
}
static double SafeSqrt(double number)
{
if (number < 0)
{
throw new ArgumentOutOfRangeException(nameof(number), "負の数の平方根は計算できません。");
}
return Math.Sqrt(number);
}
}
このコードでは、SafeSqrtメソッドの中で負の数をチェックしています。
負の数が渡された場合は、ArgumentOutOfRangeExceptionを発生させています。
実行結果の例は次のようになります。
負の数の平方根は計算できません。 (Parameter 'number')
業務アプリやライブラリでは、「不正な値を受け取ったら例外を投げる」という設計が適している場合があります。
一方、初心者向けのコンソールアプリや入力チェックでは、まずはif文で負の数を事前にチェックする方法がわかりやすいです。
6. よくあるエラーと解決方法
6-1. Math.Sqrtが使えないときの原因
Math.Sqrtが使えない場合、まず確認したいのはコードの書き方です。
正しい書き方は次のとおりです。
C#double result = Math.Sqrt(9);
よくある間違いとして、メソッド名の大文字・小文字を間違えるケースがあります。
C#double result = Math.sqrt(9); // エラー
C#は大文字と小文字を区別します。
そのため、sqrtではなくSqrtと書く必要があります。
C#double result = Math.Sqrt(9); // 正しい
また、Mathの前後に不要なスペルミスがないかも確認しましょう。
C#double result = Maths.Sqrt(9); // エラー
正しくはMathです。
6-2. 型変換エラーが出る場合の対処法
Math.Sqrtでよくある型変換エラーは、戻り値をint型に直接代入してしまうケースです。
C#int result = Math.Sqrt(25); // エラー
Math.Sqrtの戻り値はdouble型なので、次のように書く必要があります。
C#double result = Math.Sqrt(25);
どうしてもint型にしたい場合は、キャストや丸め処理を使います。
C#int result = (int)Math.Sqrt(25);
ただし、キャストは小数点以下を切り捨てます。
四捨五入したい場合は次のように書きます。
C#int result = (int)Math.Round(Math.Sqrt(25));
小数が出る可能性がある場合は、意図した変換になっているか確認しましょう。
6-3. 計算結果が想定と違う場合の確認ポイント
Math.Sqrtの計算結果が想定と違う場合は、まず渡している値を確認しましょう。
たとえば、次のコードでは結果は5ではなく約7.07になります。
C#double result = Math.Sqrt(3 * 3 + 4 * 4 + 5 * 5);
Console.WriteLine(result);
計算式が複雑になると、どの値の平方根を求めているのかがわかりにくくなります。
途中の値を表示して確認すると、原因を見つけやすくなります。
C#double value = 3 * 3 + 4 * 4;
Console.WriteLine(value);
double result = Math.Sqrt(value);
Console.WriteLine(result);
実行結果は次のようになります。
25
5
また、割り切れない平方根は近似値として表示されます。
C#Console.WriteLine(Math.Sqrt(2));
実行結果の例は次のとおりです。
1.4142135623730951
これはエラーではなく、浮動小数点数として近似値が表示されているだけです。
6-4. 整数の結果だけほしい場合の対処法
平方根の結果を整数として扱いたい場合は、どのように整数化したいかを決める必要があります。
小数点以下を切り捨てるなら、キャストまたはMath.Floorを使います。
C#int result = (int)Math.Sqrt(10);
Console.WriteLine(result);
実行結果は次のとおりです。
3
四捨五入したいならMath.Roundを使います。
C#int result = (int)Math.Round(Math.Sqrt(10));
Console.WriteLine(result);
実行結果は次のとおりです。
3
切り上げたいならMath.Ceilingを使います。
C#int result = (int)Math.Ceiling(Math.Sqrt(10));
Console.WriteLine(result);
実行結果は次のとおりです。
4
単にintに変換するだけでは、期待と違う結果になることがあります。
特に、ルート計算の結果を配列のサイズやループ回数に使う場合は、切り捨て、四捨五入、切り上げのどれが適切かを考えてから実装しましょう。
6-5. Visual Studioで確認すべき設定
Visual StudioでMath.Sqrtを使う場合、基本的には特別な設定は必要ありません。
ただし、エラーが出る場合は次の点を確認しましょう。
まず、プロジェクトがC#のコンソールアプリとして作成されているか確認します。
次に、コード内でMainメソッドの中に処理を書いているか確認します。
C#using System;
class Program
{
static void Main()
{
double result = Math.Sqrt(9);
Console.WriteLine(result);
}
}
また、古い形式のプロジェクトではusing System;が必要になることがあります。
新しいC#のテンプレートでは、次のようなトップレベルステートメントで書くこともできます。
C#double result = Math.Sqrt(9);
Console.WriteLine(result);
この書き方では、class Programやstatic void Main()を書かなくても動作します。
もし教材や記事のコードと自分の環境のコード形式が違っていても、どちらもC#の正しい書き方です。
7. Math.Sqrtの実用的な使い方
7-1. 三平方の定理で距離を求める
Math.Sqrtは、三平方の定理でよく使われます。
三平方の定理とは、直角三角形の斜辺を求める公式です。
斜辺 = √(横の長さ² + 縦の長さ²)
C#で書くと次のようになります。
C#double width = 3;
double height = 4;
double hypotenuse = Math.Sqrt(width * width + height * height);
Console.WriteLine(hypotenuse);
実行結果は次のとおりです。
5
width * widthで横の長さの2乗、height * heightで縦の長さの2乗を計算しています。
それらを足した値に対してMath.Sqrtを使うことで、斜辺の長さを求めています。
7-2. 2点間の距離を計算する
ゲーム開発や座標計算では、2点間の距離を求める場面があります。
2点(x1, y1)と(x2, y2)の距離は、次の式で求められます。
距離 = √((x2 - x1)² + (y2 - y1)²)
C#で書くと次のようになります。
C#double x1 = 1;
double y1 = 2;
double x2 = 4;
double y2 = 6;
double dx = x2 - x1;
double dy = y2 - y1;
double distance = Math.Sqrt(dx * dx + dy * dy);
Console.WriteLine(distance);
実行結果は次のとおりです。
5
このように、Math.Sqrtは座標間の距離計算でよく使われます。
メソッドにまとめると、再利用しやすくなります。
C#static double GetDistance(double x1, double y1, double x2, double y2)
{
double dx = x2 - x1;
double dy = y2 - y1;
return Math.Sqrt(dx * dx + dy * dy);
}
使うときは次のように呼び出します。
C#double distance = GetDistance(1, 2, 4, 6);
Console.WriteLine(distance);
7-3. 配列やリストの値に対して平方根を求める
複数の値に対して平方根を求めたい場合は、配列やリストとforeach文を組み合わせると便利です。
C#double[] numbers = { 4, 9, 16, 25, 36 };
foreach (double number in numbers)
{
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
}
実行結果は次のようになります。
4の平方根は2です。
9の平方根は3です。
16の平方根は4です。
25の平方根は5です。
36の平方根は6です。
List<double>を使う場合は次のように書けます。
C#using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
List<double> numbers = new List<double> { 2, 3, 5, 10 };
foreach (double number in numbers)
{
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
}
}
}
配列やリストに負の数が含まれる可能性がある場合は、事前にチェックすると安全です。
C#double[] numbers = { 4, -9, 16 };
foreach (double number in numbers)
{
if (number < 0)
{
Console.WriteLine($"{number}は負の数なので計算できません。");
continue;
}
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
}
7-4. 入力値から平方根を計算するコンソールアプリ例
ユーザーが入力した値から平方根を求めるコンソールアプリの例を見てみましょう。
C#using System;
class Program
{
static void Main()
{
Console.Write("平方根を求めたい数値を入力してください: ");
string input = Console.ReadLine();
if (double.TryParse(input, out double number))
{
if (number < 0)
{
Console.WriteLine("負の数の平方根は計算できません。");
}
else
{
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
}
}
else
{
Console.WriteLine("数値を入力してください。");
}
}
}
このコードでは、double.TryParseを使って入力文字列を数値に変換しています。
double.Parseを使うと、数値に変換できない文字列が入力されたときに例外が発生します。
一方、double.TryParseを使うと、変換に成功したかどうかをtrueまたはfalseで判定できます。
そのため、ユーザー入力を扱う場合はTryParseを使うと安全です。
実行例は次のとおりです。
平方根を求めたい数値を入力してください: 64
64の平方根は8です。
負の数を入力した場合は次のようになります。
平方根を求めたい数値を入力してください: -4
負の数の平方根は計算できません。
8. C#でn乗根を求める方法
8-1. Math.Sqrtは平方根専用
Math.Sqrtは平方根専用のメソッドです。
つまり、2乗根を求めるためのメソッドです。
C#double result = Math.Sqrt(16);
Console.WriteLine(result);
実行結果は次のようになります。
4
3乗根や4乗根などを求めたい場合、Math.Sqrtだけでは対応できません。
たとえば、8の3乗根は2です。
2 × 2 × 2 = 8
このようなn乗根を求めたい場合は、Math.Powを使います。
8-2. 3乗根やn乗根はMath.Powを使う
Math.Powは、べき乗を計算するメソッドです。
基本構文は次のとおりです。
C#Math.Pow(数値, 指数)
たとえば、2の3乗を求める場合は次のように書きます。
C#double result = Math.Pow(2, 3);
Console.WriteLine(result);
実行結果は次のとおりです。
8
n乗根を求める場合は、指数に1.0 / nを指定します。
3乗根なら次のようになります。
C#double result = Math.Pow(8, 1.0 / 3.0);
Console.WriteLine(result);
実行結果は次のようになります。
2
4乗根なら次のように書きます。
C#double result = Math.Pow(16, 1.0 / 4.0);
Console.WriteLine(result);
実行結果は次のとおりです。
2
8-3. Math.SqrtとMath.Powの使い分け
平方根を求めるだけなら、Math.Sqrtを使うのがおすすめです。
C#double result = Math.Sqrt(25);
同じ計算はMath.Powでも書けます。
C#double result = Math.Pow(25, 0.5);
どちらも25の平方根を求めるコードです。
ただし、平方根であることが明確な場合はMath.Sqrtのほうが読みやすく、意図も伝わりやすいです。
一方、3乗根やn乗根を求めたい場合はMath.Powを使います。
C#double cubeRoot = Math.Pow(27, 1.0 / 3.0);
使い分けをまとめると、次のようになります。
平方根を求める Math.Sqrt
3乗根やn乗根を求める Math.Pow
べき乗を求める Math.Pow
初心者のうちは、「ルートならMath.Sqrt」「n乗根ならMath.Pow」と覚えておくとよいでしょう。
8-4. n乗根を求めるサンプルコード
n乗根を求める処理をメソッドにすると、使い回しやすくなります。
C#using System;
class Program
{
static void Main()
{
double number = 81;
double n = 4;
double result = NthRoot(number, n);
Console.WriteLine($"{number}の{n}乗根は{result}です。");
}
static double NthRoot(double number, double n)
{
return Math.Pow(number, 1.0 / n);
}
}
実行結果は次のようになります。
81の4乗根は3です。
ただし、nが0の場合は計算できません。
そのため、実用的には次のようにチェックを入れると安全です。
C#static double NthRoot(double number, double n)
{
if (n == 0)
{
throw new ArgumentException("nに0は指定できません。");
}
return Math.Pow(number, 1.0 / n);
}
また、負の数のn乗根を扱う場合は注意が必要です。
たとえば、-8の3乗根は数学的には-2ですが、Math.Pow(-8, 1.0 / 3.0)は環境や計算の扱いによってNaNになることがあります。
負の数の奇数乗根を厳密に扱いたい場合は、別途ロジックを用意する必要があります。
C#static double CubeRoot(double number)
{
if (number < 0)
{
return -Math.Pow(-number, 1.0 / 3.0);
}
return Math.Pow(number, 1.0 / 3.0);
}
このように書けば、負の数の3乗根にも対応できます。
9. 初心者が押さえておきたい関連知識
9-1. Mathクラスとは何か
Mathクラスは、C#で数学的な計算を行うために用意されているクラスです。
平方根を求めるMath.Sqrtのほかにも、さまざまなメソッドがあります。
C#Console.WriteLine(Math.Abs(-10)); // 絶対値
Console.WriteLine(Math.Pow(2, 3)); // べき乗
Console.WriteLine(Math.Round(3.14)); // 四捨五入
Console.WriteLine(Math.Floor(3.9)); // 切り捨て
Console.WriteLine(Math.Ceiling(3.1)); // 切り上げ
実行結果は次のようになります。
10
8
3
3
4
Mathクラスのメソッドは、基本的にインスタンスを作らずに使えます。
次のように書く必要はありません。
C#Math math = new Math(); // 不要
Math.Sqrtのように、クラス名から直接呼び出します。
C#double result = Math.Sqrt(100);
9-2. double型とfloat型の違い
C#で小数を扱う代表的な型には、double型とfloat型があります。
double型は、float型よりも高い精度で小数を扱えます。
Math.Sqrtの戻り値はdouble型です。
C#double result = Math.Sqrt(2);
float型の変数に代入したい場合は、キャストが必要です。
C#float result = (float)Math.Sqrt(2);
ただし、floatに変換すると精度が下がる可能性があります。
通常のC#プログラミングでは、小数計算にはdoubleを使うことが多いです。
ゲーム開発などでfloatがよく使われる環境もありますが、Math.Sqrtを使う場合は戻り値がdoubleであることを意識しましょう。
9-3. キャストと型変換の基本
キャストとは、ある型の値を別の型に変換することです。
Math.Sqrtの結果はdouble型なので、int型にしたい場合はキャストが必要です。
C#double root = Math.Sqrt(16);
int result = (int)root;
直接書くこともできます。
C#int result = (int)Math.Sqrt(16);
ただし、doubleからintへのキャストでは、小数点以下が切り捨てられます。
C#int result = (int)3.9;
Console.WriteLine(result);
実行結果は次のとおりです。
3
四捨五入とは違うので注意しましょう。
四捨五入したい場合は、Math.Roundを使います。
C#int result = (int)Math.Round(3.9);
Console.WriteLine(result);
実行結果は次のとおりです。
4
型変換はC#でよく出てくる重要な考え方です。Math.Sqrtを使うときも、戻り値の型を意識するとエラーを減らせます。
9-4. Console.WriteLineで結果を表示する方法
計算結果を画面に表示するには、Console.WriteLineを使います。
C#double result = Math.Sqrt(36);
Console.WriteLine(result);
実行結果は次のようになります。
6
説明文と一緒に表示したい場合は、文字列補間を使うと便利です。
C#double number = 36;
double result = Math.Sqrt(number);
Console.WriteLine($"{number}の平方根は{result}です。");
実行結果は次のとおりです。
36の平方根は6です。
小数点以下の桁数を指定したい場合は、書式指定を使えます。
C#double result = Math.Sqrt(2);
Console.WriteLine($"{result:F2}");
実行結果は次のようになります。
1.41
F2は、小数点以下2桁で表示する指定です。
表示だけを整えたい場合は書式指定、値そのものを丸めたい場合はMath.Roundを使う、と覚えておくとよいでしょう。
10. C#のルート計算に関するよくある質問
10-1. Math.Sqrtで整数の平方根は求められる?
はい、求められます。
Math.Sqrtにはint型の整数を渡すことができます。
C#int number = 49;
double result = Math.Sqrt(number);
Console.WriteLine(result);
実行結果は次のとおりです。
7
ただし、戻り値はdouble型です。
整数を渡したからといって、結果がint型になるわけではありません。
C#double result = Math.Sqrt(49);
このように、結果はdouble型で受け取るのが基本です。
10-2. Math.Sqrtの結果をintで受け取れる?
Math.Sqrtの結果をint型に直接代入することはできません。
次のコードはエラーになります。
C#int result = Math.Sqrt(16); // エラー
intで受け取りたい場合は、キャストが必要です。
C#int result = (int)Math.Sqrt(16);
Console.WriteLine(result);
実行結果は次のとおりです。
4
ただし、キャストすると小数点以下は切り捨てられます。
C#int result = (int)Math.Sqrt(10);
Console.WriteLine(result);
実行結果は次のようになります。
3
四捨五入したい場合は、Math.Roundを使いましょう。
C#int result = (int)Math.Round(Math.Sqrt(10));
10-3. 負の数の平方根を求めるには?
通常の実数の範囲では、負の数の平方根は求められません。
C#でMath.Sqrtに負の数を渡すと、NaNが返ります。
C#double result = Math.Sqrt(-1);
Console.WriteLine(result);
実行結果は次のとおりです。
NaN
負の数が入力される可能性がある場合は、事前にチェックしましょう。
C#double number = -1;
if (number < 0)
{
Console.WriteLine("負の数の平方根は計算できません。");
}
else
{
double result = Math.Sqrt(number);
Console.WriteLine(result);
}
なお、複素数として負の数の平方根を扱いたい場合は、通常のdoubleではなく複素数を扱う仕組みが必要です。
初心者のうちは、まず「Math.Sqrtは実数の平方根を求めるもの」「負の数を渡すとNaNになる」と覚えておきましょう。
10-4. 小数点以下を切り捨て・四捨五入するには?
小数点以下を切り捨てたい場合は、Math.Floorまたはintへのキャストを使います。
C#double result = Math.Sqrt(10);
Console.WriteLine(Math.Floor(result));
Console.WriteLine((int)result);
実行結果は次のようになります。
3
3
四捨五入したい場合は、Math.Roundを使います。
C#double result = Math.Sqrt(10);
double rounded = Math.Round(result, 2);
Console.WriteLine(rounded);
実行結果は次のとおりです。
3.16
切り上げたい場合は、Math.Ceilingを使います。
C#double result = Math.Sqrt(10);
double ceiling = Math.Ceiling(result);
Console.WriteLine(ceiling);
実行結果は次のとおりです。
4
目的に応じて、切り捨て、四捨五入、切り上げを使い分けましょう。
10-5. Math.SqrtとMath.Powはどちらを使うべき?
平方根を求めるだけなら、Math.Sqrtを使うのがおすすめです。
C#double result = Math.Sqrt(25);
Math.Powでも平方根を求めることはできます。
C#double result = Math.Pow(25, 0.5);
しかし、平方根を求めていることが明確にわかるため、Math.Sqrtのほうが読みやすいです。
一方で、3乗根やn乗根を求める場合はMath.Powを使います。
C#double cubeRoot = Math.Pow(27, 1.0 / 3.0);
使い分けの目安は次のとおりです。
平方根だけを求める場合 Math.Sqrt
n乗根を求める場合 Math.Pow
べき乗を求める場合 Math.Pow
C#でルート計算をするなら、まずはMath.Sqrtを使うと覚えておけば問題ありません。
まとめ
C#でルート、つまり平方根を求めるには、Math.Sqrtを使います。
基本的な書き方は次のとおりです。
C#double result = Math.Sqrt(数値);
たとえば、9の平方根を求める場合は次のように書きます。
C#double result = Math.Sqrt(9);
Console.WriteLine(result);
実行結果は次のとおりです。
3
Math.Sqrtを使うときに特に重要なのは、戻り値がdouble型になることです。
そのため、結果をint型に直接代入することはできません。
C#int result = Math.Sqrt(9); // エラー
正しくは次のように書きます。
C#double result = Math.Sqrt(9);
整数として扱いたい場合は、キャストやMath.Round、Math.Floor、Math.Ceilingなどを使って目的に合った丸め処理を行います。
また、負の数をMath.Sqrtに渡すと、例外ではなくNaNが返ります。
C#double result = Math.Sqrt(-1);
Console.WriteLine(result);
実行結果は次のようになります。
NaN
負の数が入力される可能性がある場合は、if文で事前にチェックするか、double.IsNaNで判定すると安全です。
平方根だけを求めるならMath.Sqrt、3乗根やn乗根を求めるならMath.Powを使います。
C#double squareRoot = Math.Sqrt(16);
double cubeRoot = Math.Pow(8, 1.0 / 3.0);
C#のルート計算は、基本を理解すれば難しくありません。
まずはMath.Sqrtの使い方、戻り値がdoubleであること、負の数ではNaNになることを押さえておきましょう。

