Math.Max() / Math.Min() / Math.Pow() / Math.Sqrt()
| 対応: | C# 1.0(2002) |
|---|
2つの値の大きい方を返す『Math.Max()』、小さい方を返す『Math.Min()』、累乗を計算する『Math.Pow()』、平方根を返す『Math.Sqrt()』の使い方です。
構文
using System; // val1 と val2 のうち大きい方を返します。 Math.Max(T val1, T val2) // val1 と val2 のうち小さい方を返します。 Math.Min(T val1, T val2) // x の y 乗を返します。戻り値は double 型です。 Math.Pow(double x, double y) // d の平方根を返します。戻り値は double 型です。 Math.Sqrt(double d) // x の自然対数を返します。 Math.Log(double x) // 指定した底 newBase に対する x の対数を返します。 Math.Log(double x, double newBase)
メソッド一覧
| メソッド | 概要 |
|---|---|
| Math.Max(val1, val2) | val1 と val2 のうち大きい方の値を返します。int, double, decimal など各数値型のオーバーロードがあります。 |
| Math.Min(val1, val2) | val1 と val2 のうち小さい方の値を返します。 |
| Math.Pow(x, y) | x の y 乗(x^y)を返します。戻り値は常に double 型です。 |
| Math.Sqrt(d) | d の平方根を返します。d が負の場合は NaN を返します。 |
| Math.Log(x) | x の自然対数(底 e)を返します。 |
| Math.Log(x, newBase) | x の newBase を底とする対数を返します。 |
| Math.Log10(x) | x の常用対数(底 10)を返します。 |
サンプルコード
Program.cs
using System; // Math.Max() — 2 つの値のうち大きい方を取得します。 Console.WriteLine(Math.Max(10, 20)); // 20 Console.WriteLine(Math.Max(-5, -3)); // -3 Console.WriteLine(Math.Max(3.7, 3.2)); // 3.7 // Math.Min() — 2 つの値のうち小さい方を取得します。 Console.WriteLine(Math.Min(10, 20)); // 10 Console.WriteLine(Math.Min(-5, -3)); // -5 // Math.Pow() — 累乗を計算します。 Console.WriteLine(Math.Pow(2, 10)); // 1024(2 の 10 乗) Console.WriteLine(Math.Pow(3, 3)); // 27(3 の 3 乗) Console.WriteLine(Math.Pow(9, 0.5)); // 3(9 の 0.5 乗 = 平方根) // Math.Sqrt() — 平方根を計算します。 Console.WriteLine(Math.Sqrt(16)); // 4 Console.WriteLine(Math.Sqrt(2)); // 1.4142135623730951 Console.WriteLine(Math.Sqrt(-1)); // NaN(負の数の平方根は実数ではありません) // Math.Log() — 対数を計算します。 Console.WriteLine(Math.Log(Math.E)); // 1(自然対数 log_e(e) = 1) Console.WriteLine(Math.Log10(1000)); // 3(常用対数 log_10(1000) = 3) Console.WriteLine(Math.Log(8, 2)); // 3(log_2(8) = 3)
dotnet run 20 -3 3.7 10 -5 1024 27 3 4 1.4142135623730951 NaN 1 3 3
サンプルコード: 実用例(複利計算)
累乗を使った実用例として、複利計算(元金 × (1 + 利率)^年数)を示します。
Compound.cs
using System;
double principal = 100000; // 元金
double rate = 0.03; // 年利 3%
int years = 10; // 運用年数
double futureValue = principal * Math.Pow(1 + rate, years);
Console.WriteLine($"{years}年後の金額: {futureValue:F0} 円");
// 値域を制限する: スコアを 0〜100 の範囲に収める
int score = 115;
int clamped = Math.Max(0, Math.Min(100, score));
Console.WriteLine($"クランプ後: {clamped}");
dotnet run 10年後の金額: 134392 円 クランプ後: 100
よくあるミス
よくあるミス: Math.Sqrt() は負の数で NaN を返す(例外ではない)
Math.Sqrt() に負の値を渡すと、例外はスローされずに NaN(非数)が返されます。そのまま計算を続けると結果も NaN になり、バグの原因が見つけにくくなります。負の値を渡す可能性がある場合は呼び出し前に確認してください。
using System; // NG: 負の数を渡すと NaN が返る(例外は投げない) double result = Math.Sqrt(-4); Console.WriteLine(result); // NaN Console.WriteLine(result + 10); // NaN(NaN との演算は常に NaN) Console.WriteLine(result == result); // False(NaN は自分自身と等しくない)
修正後は次の通りです。
using System;
// OK: 負の値を渡す前に確認する
double value = -4;
if (value >= 0)
{
Console.WriteLine(Math.Sqrt(value));
}
else
{
Console.WriteLine("負の数の平方根は実数ではありません。");
}
dotnet run NaN NaN False 負の数の平方根は実数ではありません。
概要
『Math.Pow()』と『Math.Sqrt()』の戻り値は常に double 型です。整数型の変数に代入するには明示的なキャストが必要です。『Math.Sqrt()』に負の値を渡すと例外ではなく NaN(非数)が返されるので注意してください。
『Math.Max()』と『Math.Min()』は 2 つの値しか比較できません。配列やリスト全体の最大・最小値を求めるには LINQ の Max() / Min() を使用してください。絶対値・丸め処理についてはMath.Abs() / Round() / Ceiling() / Floor()をご確認ください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。