Mathクラス
数学用の関数と定数
C#の標準クラスであるMathには様々な数学用のメソッド(関数)と定数が用意されています。
全部を説明するのは量が多すぎるので、ここでは比較的よく使われるものを紹介します。
定数
メソッド
- Math.Min
- Math.Max
- Math.Floor
- Math.Truncate
- Math.Ceiling
- Math.Round
- Math.Abs
- Math.Pow
- Math.Exp
- Math.Sqrt
- Math.Sign
- Math.Sin
- Math.Cos
- Math.Tan
- Math.Asin
- Math.Acos
- Math.Atan
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