C#で二乗する方法|Math.Powとx*xの違い、^演算子の注意点まで解説

はじめに

C#で二乗する方法を調べると、Math.Powを使う書き方や、x * xのように自分自身を掛ける書き方が出てきます。

また、他の言語を使った経験がある人は、x ^ 2のように書けば二乗できると思うかもしれません。しかし、C#の^演算子は累乗ではないため注意が必要です。

この記事では、C#で二乗する基本的な方法から、Math.Powx * xの違い、戻り値の型、オーバーフロー、^演算子の注意点までわかりやすく解説します。

1. C#で二乗する基本的な方法

1-1. 二乗とは「同じ数を2回掛ける」計算

二乗とは、ある数を自分自身で掛ける計算です。

たとえば、5の二乗は次のようになります。

C#
5 * 5

結果は25です。

数学では「5²」のように表しますが、C#ではそのままとは書けません。プログラム上では、演算子やメソッドを使って二乗を表現します。

1-2. C#で二乗する代表的な書き方はMath.Powとx * x

C#で二乗する代表的な方法は、主に次の2つです。

C#
Math.Pow(x, 2)

または、

C#
x * x

Math.Pow(x, 2)は、累乗を計算するためのメソッドです。第1引数に底となる数、第2引数に指数を指定します。

一方、x * xは、変数xをそのまま自分自身で掛ける書き方です。二乗だけを計算したい場合は、こちらの方がシンプルです。

1-3. 結論:単純な二乗ならx * xがわかりやすく高速

C#で単純に二乗したいだけなら、基本的にはx * xを使うのがおすすめです。

理由は、次のとおりです。

C#
int x = 5;
int result = x * x;

この書き方は、見た目にも「同じ数を掛けている」とわかりやすく、戻り値の型も自然です。

一方、Math.Pow(x, 2)は戻り値がdoubleになるため、整数として使いたい場合はキャストが必要になることがあります。

2. Math.Powで二乗する方法

2-1. Math.Pow(x, 2)の基本構文

Math.Powを使って二乗する場合は、次のように書きます。

C#
Math.Pow(x, 2)

たとえば、5の二乗を計算する場合は次のようになります。

C#
double result = Math.Pow(5, 2);

Console.WriteLine(result);

実行結果は次のとおりです。

25

Math.Powは累乗を計算するメソッドなので、二乗だけでなく三乗や四乗などにも使えます。

C#
double square = Math.Pow(5, 2); // 5の二乗
double cube = Math.Pow(5, 3); // 5の三乗

2-2. intやdoubleでMath.Powを使うサンプルコード

int型の値をMath.Powで二乗する例です。

C#
int x = 10;

double result = Math.Pow(x, 2);

Console.WriteLine(result);

実行結果は次のとおりです。

100

double型の値を二乗する場合も同じように書けます。

C#
double x = 2.5;

double result = Math.Pow(x, 2);

Console.WriteLine(result);

実行結果は次のとおりです。

6.25

このように、Math.Powは整数でも小数でも使えます。

2-3. Math.Powの戻り値はdoubleになる点に注意

Math.Powを使うときに特に注意したいのが、戻り値の型です。

Math.Powの戻り値はdoubleです。そのため、次のようにint型の変数へ直接代入しようとするとエラーになります。

C#
int x = 5;

int result = Math.Pow(x, 2); // エラー

Math.Pow(x, 2)の結果は25に見えますが、型としてはdoubleです。intに代入したい場合は、明示的なキャストが必要です。

C#
int x = 5;

int result = (int)Math.Pow(x, 2);

Console.WriteLine(result);

ただし、小数を含む計算結果をintにキャストすると、小数点以下が切り捨てられる点に注意しましょう。

2-4. 小数や累乗計算にMath.Powが向いているケース

Math.Powは、二乗以外の累乗を扱いたい場合に便利です。

C#
double x = 3;

double result1 = Math.Pow(x, 2); // 二乗
double result2 = Math.Pow(x, 3); // 三乗
double result3 = Math.Pow(x, 4); // 四乗

また、指数を変数で指定したい場合にも向いています。

C#
double x = 2;
double exponent = 5;

double result = Math.Pow(x, exponent);

Console.WriteLine(result);

このように、二乗に限らず「何乗するかわからない」「指数が変わる」という場合は、Math.Powを使うと柔軟に書けます。

3. x * xで二乗する方法

3-1. 変数を自分自身で掛ける基本構文

C#で二乗するもっともシンプルな方法は、変数を自分自身で掛ける方法です。

C#
x * x

たとえば、5の二乗を計算する場合は次のように書きます。

C#
int x = 5;

int result = x * x;

Console.WriteLine(result);

実行結果は次のとおりです。

25

この書き方は、二乗の意味そのものをコードで表しているため、初心者にも理解しやすいです。

3-2. int・long・doubleでx * xを使うサンプルコード

int型で二乗する例です。

C#
int x = 12;

int result = x * x;

Console.WriteLine(result);

実行結果は次のとおりです。

144

long型でも同じように書けます。

C#
long x = 100000L;

long result = x * x;

Console.WriteLine(result);

double型の小数を二乗することもできます。

C#
double x = 1.5;

double result = x * x;

Console.WriteLine(result);

実行結果は次のとおりです。

2.25

x * xは、intlongfloatdoubledecimalなど、掛け算ができる型であれば自然に使えます。

3-3. 単純な二乗ではx * xが読みやすく処理も軽い理由

単純な二乗では、Math.Pow(x, 2)よりもx * xの方がわかりやすいことが多いです。

C#
int result = x * x;

このコードは、「xをxで掛ける」とそのまま読めます。

一方、Math.Pow(x, 2)は累乗計算用の汎用的なメソッドです。

C#
double result = Math.Pow(x, 2);

二乗だけをしたい場合には、少し大げさな書き方に見えることがあります。また、戻り値がdoubleになるため、整数計算では型変換が必要になることもあります。

そのため、単純なC#の二乗計算では、基本的にx * xを選ぶとよいでしょう。

3-4. オーバーフローに注意すべきケース

整数の二乗では、オーバーフローに注意が必要です。

たとえば、int型の範囲を超える結果になる場合、正しい値が入らないことがあります。

C#
int x = 50000;

int result = x * x;

Console.WriteLine(result);

50000 * 500002,500,000,000ですが、これはint型の最大値を超えます。

安全に扱いたい場合は、longを使います。

C#
int x = 50000;

long result = (long)x * x;

Console.WriteLine(result);

また、オーバーフローを検出したい場合はcheckedを使えます。

C#
int x = 50000;

checked
{
int result = x * x;
Console.WriteLine(result);
}

checkedを使うと、オーバーフローが発生したときに例外として検出できます。

4. Math.Powとx * xの違い

4-1. 戻り値の型の違い

Math.Powx * xの大きな違いは、戻り値の型です。

Math.Powの戻り値はdoubleです。

C#
int x = 5;

double result = Math.Pow(x, 2);

一方、x * xは、基本的に掛け算に使った型に応じた結果になります。

C#
int x = 5;

int result = x * x;

整数を二乗して整数として扱いたい場合は、x * xの方が自然です。

4-2. 処理速度・パフォーマンスの違い

単純な二乗だけであれば、x * xの方が処理は軽いです。

Math.Powは、二乗だけでなくさまざまな累乗に対応する汎用的なメソッドです。そのため、ただ1回掛け算するだけのx * xと比べると、処理としては複雑になります。

大量のデータをループで二乗するような処理では、x * xを使う方が適しています。

C#
for (int i = 0; i < 1000000; i++)
{
int square = i * i;
}

二乗だけで十分な場面では、無理にMath.Powを使う必要はありません。

4-3. コードの読みやすさの違い

二乗だけを表したいなら、x * xは非常に読みやすいです。

C#
int square = x * x;

変数名を工夫すれば、さらに意味が明確になります。

C#
int width = 10;
int area = width * width;

一方で、指数が変わる処理ではMath.Powの方が意図を表しやすくなります。

C#
double result = Math.Pow(x, exponent);

このように、二乗だけならx * x、指数を柔軟に変えたいならMath.Powという使い分けがわかりやすいです。

4-4. 整数計算と小数計算での使い分け

整数の二乗では、x * xがおすすめです。

C#
int x = 8;
int result = x * x;

小数の二乗でも、単純な二乗ならx * xで問題ありません。

C#
double x = 2.5;
double result = x * x;

ただし、小数の累乗や指数を変えたい場合は、Math.Powが便利です。

C#
double x = 2.5;
double result = Math.Pow(x, 3);

整数計算ではx * x、累乗計算ではMath.Powを使う、と覚えるとよいでしょう。

4-5. 二乗だけならどちらを使うべきか

C#で二乗するだけなら、基本的にはx * xを使うのがおすすめです。

C#
int square = x * x;

理由は、次のとおりです。

x * xはコードが短く、意味が直感的で、戻り値の型も扱いやすいです。また、単純な掛け算なので処理も軽くなります。

一方、Math.Powは次のような場合に使うとよいでしょう。

C#
double result = Math.Pow(x, exponent);

指数が変わる場合や、二乗以外の累乗を計算したい場合にはMath.Powが便利です。

5. C#の^演算子で二乗できない理由

5-1. ^は累乗ではなくビット排他的論理和

C#では、^演算子は累乗ではありません。

C#
int result = 2 ^ 2;

このコードを見ると、他の言語に慣れている人は「2の二乗で4になる」と思うかもしれません。

しかし、C#の^はビット排他的論理和、つまりXORを表す演算子です。

そのため、x ^ 2と書いても、xの二乗にはなりません。

5-2. 2 ^ 2の結果が4にならないケース

実際に2 ^ 2を実行してみます。

C#
int result = 2 ^ 2;

Console.WriteLine(result);

実行結果は次のとおりです。

0

これは、22のビット排他的論理和を計算しているためです。

2を2進数で表すと、次のようになります。

10

同じ値同士のXORは0になるため、2 ^ 2の結果は0です。

二乗したい場合は、次のように書きます。

C#
int result = 2 * 2;

または、

C#
double result = Math.Pow(2, 2);

5-3. 他言語経験者が間違えやすいポイント

C#以外の言語やツールでは、^が累乗のように使われる場合があります。

そのため、次のようなコードを書いてしまうことがあります。

C#
int x = 5;

int result = x ^ 2;

しかし、C#ではこれは二乗ではありません。

二乗したいなら、次のように書きます。

C#
int result = x * x;

C#で「二乗」「累乗」と聞いたときに、^を使わないことが重要です。

5-4. C#で累乗したい場合はMath.Powを使う

C#で累乗を計算したい場合は、Math.Powを使います。

C#
double result = Math.Pow(2, 10);

Console.WriteLine(result);

実行結果は次のとおりです。

1024

二乗だけならx * xで十分ですが、三乗、四乗、十乗のような計算ではMath.Powが便利です。

C#
double square = Math.Pow(3, 2);
double cube = Math.Pow(3, 3);
double fourth = Math.Pow(3, 4);

6. 型変換と戻り値でつまずきやすいポイント

6-1. Math.Powの結果をintに代入するとエラーになる理由

Math.Powの戻り値はdoubleです。

そのため、次のコードはエラーになります。

C#
int x = 5;

int result = Math.Pow(x, 2);

Math.Pow(x, 2)の結果は数値としては25ですが、型はdoubleです。C#では、doubleからintへの変換は自動では行われません。

理由は、小数点以下の情報が失われる可能性があるためです。

6-2. intに戻したい場合のキャスト方法

Math.Powの結果をintにしたい場合は、明示的にキャストします。

C#
int x = 5;

int result = (int)Math.Pow(x, 2);

Console.WriteLine(result);

ただし、二乗だけなら最初からx * xを使う方が自然です。

C#
int x = 5;

int result = x * x;

整数の二乗を整数で受け取りたいなら、基本的にはこちらを使うとよいでしょう。

6-3. 小数点以下の扱いと丸め誤差

doubleは小数を扱えますが、すべての小数を正確に表現できるわけではありません。

たとえば、小数の計算ではわずかな誤差が出ることがあります。

C#
double x = 0.1;

double result = x * x;

Console.WriteLine(result);

期待する値は0.01ですが、内部的にはわずかな誤差を含む場合があります。

金額計算のように正確な小数計算が必要な場合は、decimal型を検討します。

C#
decimal x = 0.1m;

decimal result = x * x;

Console.WriteLine(result);

6-4. decimal型で二乗したい場合の考え方

decimal型で二乗したい場合は、基本的にx * xを使います。

C#
decimal price = 12.5m;

decimal result = price * price;

Console.WriteLine(result);

Math.Powdoubleを返すため、decimalの精度を保ちたい計算には向いていません。

たとえば、次のようにdecimaldoubleに変換してMath.Powを使うこともできます。

C#
decimal x = 12.5m;

decimal result = (decimal)Math.Pow((double)x, 2);

しかし、この方法ではdoubleを経由するため、正確な小数計算が必要な場面では避けた方がよいです。

decimalで二乗するなら、次の書き方が基本です。

C#
decimal result = x * x;

7. 用途別:C#で二乗する実践例

7-1. 整数を二乗するサンプル

整数を二乗する基本例です。

C#
int number = 7;

int square = number * number;

Console.WriteLine(square);

実行結果は次のとおりです。

49

整数を二乗して整数として扱うなら、x * xがもっともシンプルです。

7-2. 小数を二乗するサンプル

小数を二乗する場合も、x * xで書けます。

C#
double number = 3.5;

double square = number * number;

Console.WriteLine(square);

実行結果は次のとおりです。

12.25

floatを使う場合は、次のようになります。

C#
float number = 1.5f;

float square = number * number;

Console.WriteLine(square);

小数の累乗を柔軟に扱いたい場合は、Math.Powも使えます。

C#
double number = 3.5;

double square = Math.Pow(number, 2);

7-3. 配列やリストの各要素を二乗するサンプル

配列の各要素を二乗する例です。

C#
int[] numbers = { 1, 2, 3, 4, 5 };

for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = numbers[i] * numbers[i];
}

foreach (int number in numbers)
{
Console.WriteLine(number);
}

実行結果は次のとおりです。

1
4
9
16
25

List<int>でも同じように処理できます。

C#
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

for (int i = 0; i < numbers.Count; i++)
{
numbers[i] = numbers[i] * numbers[i];
}

foreach (int number in numbers)
{
Console.WriteLine(number);
}

7-4. LINQで各要素を二乗するサンプル

LINQを使うと、各要素を二乗した新しいコレクションを簡潔に作れます。

C#
using System;
using System.Linq;

int[] numbers = { 1, 2, 3, 4, 5 };

var squares = numbers.Select(x => x * x);

foreach (int square in squares)
{
Console.WriteLine(square);
}

実行結果は次のとおりです。

1
4
9
16
25

Math.Powを使うこともできます。

C#
var squares = numbers.Select(x => Math.Pow(x, 2));

ただし、この場合の結果はdoubleになります。整数の二乗として扱いたいなら、x * xの方が自然です。

7-5. 距離計算や平方和で二乗を使うサンプル

二乗は、距離計算や平方和でもよく使われます。

たとえば、2点間の距離を求める場合です。

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);

dx * dxdy * dyで、それぞれの差を二乗しています。

平方和を求める例も見てみましょう。

C#
int[] numbers = { 1, 2, 3, 4 };

int sumOfSquares = 0;

foreach (int number in numbers)
{
sumOfSquares += number * number;
}

Console.WriteLine(sumOfSquares);

実行結果は次のとおりです。

30

1 * 1 + 2 * 2 + 3 * 3 + 4 * 4なので、結果は30です。

8. C#で二乗するメソッドを自作する方法

8-1. intを受け取って二乗を返すメソッド

二乗処理を何度も使う場合は、メソッド化すると読みやすくなります。

C#
static int Square(int x)
{
return x * x;
}

使い方は次のとおりです。

C#
int result = Square(6);

Console.WriteLine(result);

実行結果は次のとおりです。

36

メソッド名をSquareにしておくと、「二乗する処理」であることが明確になります。

8-2. doubleを受け取って二乗を返すメソッド

小数を二乗したい場合は、double型のメソッドを用意します。

C#
static double Square(double x)
{
return x * x;
}

使い方は次のとおりです。

C#
double result = Square(2.5);

Console.WriteLine(result);

実行結果は次のとおりです。

6.25

int版とdouble版をオーバーロードしておくこともできます。

C#
static int Square(int x)
{
return x * x;
}

static double Square(double x)
{
return x * x;
}

8-3. ジェネリックで二乗処理を書く場合の注意点

C#でジェネリックな二乗メソッドを書きたい場合、単純に次のようには書けません。

C#
static T Square<T>(T x)
{
return x * x; // エラーになる
}

通常のジェネリック型Tに対して、*演算子が使えるとは限らないためです。

比較的新しいC#では、数値型向けのインターフェースを使ってジェネリックな数値計算を書く方法もあります。

C#
using System.Numerics;

static T Square<T>(T x) where T : INumber<T>
{
return x * x;
}

ただし、初心者向けのコードや対応環境を広くしたい場合は、int用、double用、decimal用のように型ごとにメソッドを用意する方がわかりやすいです。

8-4. 可読性を高めるためにメソッド化すべきケース

単純に1回だけ二乗するなら、メソッド化せずにx * xで十分です。

C#
int square = x * x;

しかし、同じ処理が何度も出てくる場合や、計算式の意味を明確にしたい場合はメソッド化が有効です。

C#
static double Square(double x)
{
return x * x;
}

たとえば、距離計算では次のように書けます。

C#
double distance = Math.Sqrt(Square(dx) + Square(dy));

このようにすると、dxdyを二乗して足していることがわかりやすくなります。

9. C#で二乗するときのよくあるエラーと対処法

9-1. Math.Powの戻り値をintに代入できない

よくあるエラーの1つが、Math.Powの戻り値をintに直接代入してしまうケースです。

C#
int x = 10;

int result = Math.Pow(x, 2); // エラー

Math.Powdoubleを返すため、intには直接代入できません。

対処法は、キャストすることです。

C#
int result = (int)Math.Pow(x, 2);

ただし、二乗だけなら次のように書く方がおすすめです。

C#
int result = x * x;

9-2. ^演算子を使って想定外の結果になる

C#では、^は累乗ではなくXORです。

C#
int result = 5 ^ 2;

Console.WriteLine(result);

このコードは、5の二乗を計算しているわけではありません。

二乗したい場合は、次のように書きます。

C#
int result = 5 * 5;

または、

C#
double result = Math.Pow(5, 2);

C#で二乗する場合、^を使わないようにしましょう。

9-3. 大きな数を二乗してオーバーフローする

整数を二乗すると、想像以上に大きな値になることがあります。

C#
int x = 50000;

int result = x * x;

このような場合、intの範囲を超えてオーバーフローする可能性があります。

対処法として、より大きな型を使います。

C#
int x = 50000;

long result = (long)x * x;

また、オーバーフローを検出したい場合はcheckedを使います。

C#
checked
{
int result = x * x;
}

9-4. 小数計算で誤差が出る

doubleを使った小数計算では、わずかな誤差が出ることがあります。

C#
double x = 0.1;

double result = x * x;

Console.WriteLine(result);

小数の計算結果を厳密に扱いたい場合は、decimalを検討します。

C#
decimal x = 0.1m;

decimal result = x * x;

Console.WriteLine(result);

ただし、decimalは主に金額計算などに向いており、科学技術計算ではdoubleが使われることも多いです。用途に応じて型を選びましょう。

9-5. 負の数を二乗したときの結果を誤解する

負の数を二乗すると、結果は正の数になります。

C#
int x = -5;

int result = x * x;

Console.WriteLine(result);

実行結果は次のとおりです。

25

-5 * -5なので、結果は25です。

ただし、式の書き方によって意味が変わることがあります。

C#
int result1 = -5 * -5;   // 25
double result2 = Math.Pow(-5, 2); // 25

負の値を二乗する場合も、基本的にはx * xで問題ありません。

まとめ

C#で二乗する方法は、主にMath.Pow(x, 2)x * xの2つです。

単純に二乗したいだけなら、基本的にはx * xを使うのがおすすめです。

C#
int x = 5;
int result = x * x;

x * xは読みやすく、処理も軽く、整数計算では戻り値の型も扱いやすいです。

一方、Math.Powは累乗を計算するためのメソッドです。

C#
double result = Math.Pow(x, 2);

二乗以外の累乗や、指数を変数で指定したい場合にはMath.Powが便利です。ただし、戻り値がdoubleになる点には注意しましょう。

また、C#の^演算子は累乗ではなく、ビット排他的論理和です。

C#
int result = 2 ^ 2; // 二乗ではない

C#で二乗したい場合は、^ではなく、x * xまたはMath.Pow(x, 2)を使いましょう。