Mathクラス

数学用の関数と定数

C#の標準クラスであるMathには様々な数学用のメソッド(関数)と定数が用意されています。
全部を説明するのは量が多すぎるので、ここでは比較的よく使われるものを紹介します。

定数

メソッド

Mathクラスの定数

Math.E

Math.Eはネイピア数を表すdouble型の定数です。

Math.PI

Math.PIは円周率を表すdouble型の定数です。

Mathクラスのメソッド

Mathクラスのメソッドはすべて静的メソッド(staticメソッド)です。
つまりすべて「Math.○○」という形式で使用します。

Math.Min

Math.Max

Math.Minメソッドは二つの引数のうち小さい方の値を返します。
Math.Maxメソッドは二つの引数のうち大きい方の値を返します。

引数に異なるデータ型の値をそれぞれ指定すると暗黙的な型変換が行われ、戻り値の型はデータサイズの大きい方に変換されます。


int num = Math.Min(8, 4);
double real = Math.Max(-11.2, 6.2);

Console.WriteLine(num);
Console.WriteLine(real);
4
6.2

Math.Floor

Math.Truncate

Math.Ceiling

Math.Floorメソッドは小数点以下を切り捨てた値を返します。
Math.Truncateメソッドは小数点以下を切り捨てた値を返します。
Math.Ceilingメソッドは小数点以下を切り上げた値を返します。

Math.Floorメソッドによる切り捨ては「現在の値以下で最大の整数値」になるように行われます。
正数の場合は小数点以下を取り去り、負数の場合は数値が繰り下がります。
(常に値が小さくなる)

Math.Truncateメソッドによる切り捨ては単に小数点以下を取り去ります。
正数の場合は値が小さくなり、負数の場合は値が大きくなります。

Math.Ceilingメソッドによる切り上げは「現在の値以上で最小の整数値」になるように行われます。
正数の場合は値が繰上り、負数の場合は少数点以下を取り去ります。
(常に値が大きくなる)

これらのメソッドの引数および戻り値はdouble型、もしくはdecimal型です。
整数値が欲しい場合はキャストします。


double d1 = 8.5;
double d2 = -8.5;

double floor1 = Math.Floor(d1);
double floor2 = Math.Floor(d2);

double truncate1 = Math.Truncate(d1);
double truncate2 = Math.Truncate(d2);

double ceiling1 = Math.Ceiling(d1);
double ceiling2 = Math.Ceiling(d2);

Console.WriteLine("元の値");
Console.WriteLine(d1);
Console.WriteLine(d2);

Console.WriteLine("\nMath.Floor");
Console.WriteLine(floor1);
Console.WriteLine(floor2);

Console.WriteLine("\nMath.Truncate");
Console.WriteLine(truncate1);
Console.WriteLine(truncate2);

Console.WriteLine("\nMath.Ceiling");
Console.WriteLine(ceiling1);
Console.WriteLine(ceiling2);
元の値
8.5
-8.5

Math.Floor
8
-9

Math.Truncate
8
-8

Math.Ceiling
9
-8

Math.Round

Math.Roundメソッドは値を丸めた値を返します。
「値を丸める」とは四捨五入のことですが、Math.Roundメソッドをそのまま使用した場合は微妙に異なります。
(後述)
第二引数には小数部の桁数を指定できます。

引数および戻り値はdouble型、もしくはdecimal型です。
整数値が欲しい場合はキャストします。


double round1 = Math.Round(1.23);
double round2 = Math.Round(-4.56);

//小数点第一位まで表示
//(第二位以下を丸める)
double round3 = Math.Round(7.89, 1);

Console.WriteLine(round1);
Console.WriteLine(round2);
Console.WriteLine(round3);
1
-5
7.9

正しく四捨五入する

Math.Roundメソッドで「0.5」などの中間値を丸めると、近似の偶数値に丸められます。
これは一般的感覚の四捨五入とは異なります。


double round1 = Math.Round(2.5);
double round2 = Math.Round(7.85, 1);

Console.WriteLine(round1);
Console.WriteLine(round2);
2
7.8

正しく四捨五入を行うには第二引数(桁数の指定をしている場合は第三引数)にMidpointRounding.AwayFromZeroを指定します。


double round1 = Math.Round(2.5, MidpointRounding.AwayFromZero);
double round2 = Math.Round(7.85, 1, MidpointRounding.AwayFromZero);

Console.WriteLine(round1);
Console.WriteLine(round2);
3
7.9

Math.Abs

Math.Absメソッドは値の絶対値を返します。
絶対値とは値から符号を取り去った値で、要するにマイナスの場合にプラスにします。


int num = Math.Abs(12);
double real = Math.Abs(-12.3);

Console.WriteLine(num);
Console.WriteLine(real);
12
12.3

Math.Pow

Math.Powメソッドは値の累乗を返します。
(累乗=xのy乗というやつ)
第一引数には累乗される値、第二引数には累乗する値を指定します。

このメソッドの引数および戻り値はdouble型です。
整数値が欲しい場合はキャストします。


//2の3乗
double pow1 = Math.Pow(2, 3);

//2のマイナス2乗
double pow2 = Math.Pow(2, -2);

Console.WriteLine(pow1);
Console.WriteLine(pow2);
8
0.25

Math.Exp

Math.Expメソッドは指定した値でネイピア数(Math.E)を累乗します。

このメソッドの引数および戻り値はdouble型です。


//Math.Pow(Math.E, 2)と同じ
double exp1 = Math.Exp(2);

//Math.Pow(Math.E, 3)と同じ
double exp2 = Math.Exp(3);

Console.WriteLine(exp1);
Console.WriteLine(exp2);
7.38905609893065
20.0855369231877

Math.Sqrt

Math.Sqrtメソッドは平方根を返します。

このメソッドの引数および戻り値はdouble型です。


double sqrt1 = Math.Sqrt(25);
double sqrt2 = Math.Sqrt(2);

Console.WriteLine(sqrt1);
Console.WriteLine(sqrt2);
5
1.4142135623731

Math.Sign

Math.Signメソッドは、引数が正数ならば1を、負数ならば-1を、0ならば0を返します。
(Sign=符号)

このメソッドの戻り値はint型です。


double sign1 = Math.Sign(1.2);
double sign2 = Math.Sign(-3.4);
double sign3 = Math.Sign(0.0);

Console.WriteLine(sign1);
Console.WriteLine(sign2);
Console.WriteLine(sign3);
1
-1
0

Math.Sin

Math.Cos

Math.Tan

Math.Sinメソッドは指定した値のサインを返します。
Math.Cosメソッドは指定した値のコサインを返します。
Math.Tanメソッドは指定した値のタンジェントを返します。

これらは三角関数です。
引数はラジアンという値です。
これは一般的に目にする角度、すなわち直角が90度だとか三角形の内角の和は180度といった度数法とは異なる形で角度を表す方式で、弧度法と呼ばれます。
これは「円の半径に等しい長さの弧の中心に対する角度」を1ラジアンとするもので、1ラジアンはおよそ57.3度となります。
(半径を1とすると円周は2π≒6.28、(1÷6.28)×360≒57.3)

ここでは簡単に、度数法をラジアンに変換するには「角度 * (Math.PI / 180)」とする、と覚えておきましょう。


double sin = Math.Sin(45 * (Math.PI / 180));
double cos = Math.Cos(45 * (Math.PI / 180));
double tan = Math.Tan(45 * (Math.PI / 180));

Console.WriteLine(sin);
Console.WriteLine(cos);
Console.WriteLine(tan);
0.707106781186547
0.707106781186548
1

Math.Asin

Math.Acos

Math.Atan

Math.Asinメソッドは指定した値のアークサインを返します。
Math.Acosメソッドは指定した値のアークコサインを返します。
Math.Atanメソッドは指定した値のアークタンジェントを返します。

これらは三角関数の逆関数です。
逆関数とはある関数とは逆の働きをする関数のことです。
つまり、ある関数に値(引数)を与えて得られた値(戻り値)を、その関数の逆関数に与えれば元の関数に与えた値が得られます。

引数はラジアンという値です。
(Math.Sinを参照)


double asin = Math.Asin(0.707106781186547);
double acos = Math.Acos(0.707106781186548);
double atan = Math.Atan(1);

Console.WriteLine(asin / (Math.PI / 180));
Console.WriteLine(acos / (Math.PI / 180));
Console.WriteLine(atan / (Math.PI / 180));
45
45
45