C#で0除算するとどうなる?無限大か例外か、正しい挙動と対処法を解説
C#において、0による除算(ゼロ除算)を行うと、System.DivideByZeroException という例外がスローされます。これは、割る数(除数)が0である場合に発生するエラーを処理するための専用クラスです。
実際に try-catch を使った例外処理のサンプルコードを見てみましょう。
コード例
using System;
namespace ErrorHandlingApplication {
class DivNumbers {
int result;
DivNumbers() {
result = 0;
}
public void division(int num1, int num2) {
try {
result = num1 / num2;
} catch (DivideByZeroException e) {
Console.WriteLine("Exception caught: {0}", e);
} finally {
Console.WriteLine("Result: {0}", result);
}
}
static void Main(string[] args) {
DivNumbers d = new DivNumbers();
d.division(25, 0);
Console.ReadKey();
}
}
}実行結果
Exception caught: System.DivideByZeroException: Attempted to divide by zero. at ErrorHandlingApplication.DivNumbers.division (System.Int32 num1, System.Int32 num2) [0x00000] in <a9b37148b4814c1a849bf4ee94fbe889> :0 Result: 0
このコードでは、次のように2つの値を使って除算を行っています。
result = num1 / num2;
ここで num2 に 0 を渡すと、通常であればプログラムがクラッシュしてしまいますが、try-catch ブロックで例外処理を実装しているため、DivideByZeroException が適切にキャッチされ、finally ブロックも実行された上で安全に処理が続行されます。
整数型と浮動小数点型で挙動が違う点に注意
タイトルにある「無限大か例外か」という疑問に対しては、データ型によって答えが変わるというのが正確です。
- int 型などの整数型:0で割ると必ず System.DivideByZeroException が発生します。
- double 型・float 型などの浮動小数点型:例外は発生せず、IEEE 754 規格に基づき「Infinity(無限大)」や「NaN(非数)」が返されます。
具体的には以下のような結果になります。
double d1 = 1.0 / 0.0; // 結果は PositiveInfinity(正の無限大) double d2 = -1.0 / 0.0; // 結果は NegativeInfinity(負の無限大) double d3 = 0.0 / 0.0; // 結果は NaN(非数)
まとめ
C#で0除算を扱う場合、整数型では DivideByZeroException の例外処理を必ず実装し、浮動小数点型では Infinity や NaN が返される可能性を考慮したチェックを行うことが、堅牢なプログラムを作成するためのポイントです。
-
JavaScriptでスタックトレースを取得する方法【例外発生時のデバッグ術】
JavaScriptの開発では、エラーの原因を特定するためにスタックトレース(呼び出し履歴)を確認することが非常に重要です。例外がスローされた箇所だけでなく、そこに至るまでの関数の呼び出し経路を把握できれば、バグの特定は格段に早くなります。 Errorオブジェクトのstackプロパティを使う JavaScriptでスタックトレースを取得する最もシンプルな方法は、new Error() でエラーオブジェクトを生成し、その stack プロパティを参照することです。コードにわずか数行追加するだけで、現在時点の呼び出し履歴を文字列として取得できます。 サンプルコード <html> &nb
-
JavaScriptのInfinityプロパティとは?浮動小数点数の上限と下限を解説
JavaScriptにおけるInfinityプロパティの概要 JavaScriptでは、浮動小数点数が表現できる最大値(Number.MAX_VALUE:約1.797693134862315 × 10308)を超えると、値は Infinity(正の無限大)として表示されます。逆に、表現できる最小の下限を超えて数値が小さくなりすぎた場合は -Infinity(負の無限大)として表示されます。 この仕組みは、JavaScriptがIEEE 754規格に基づく倍精度浮動小数点数を採用しているためです。計算結果が扱える範囲を外れると、エラーにはならず、自動的に無限大として処理される点が特徴的です。