ここで質問するのは間違っているかもしれませんが、興味があります。多くの言語は、0 で除算するように求められると爆発して失敗することを知っていますが、この不可能な合計をインテリジェントに処理できるプログラミング言語はありますか? もしそうなら、それらは何をしますか? 彼らは処理を続け、350/0 を 350 として扱いますか、それとも実行を停止しますか、それとも何ですか?
11 に答える
あまり知られていないJava プログラミング言語は、IEEE 浮動小数点コンテキストでゼロで除算すると、(分子に応じて)特別な定数Double.POSITIVE_INFINITY
orを与えます。Double.NEGATIVE_INFINITY
ゼロによる整数除算は定義されArithmeticException
ておらず、スローされます。これは、「爆発と失敗」のシナリオとはまったく異なります。
INTERCAL標準ライブラリはゼロ#0
除算で戻ります
Java では、浮動小数点コンテキストでゼロによる除算を行うと、特別な値Double.POSITIVE_INFINITY
orが生成されますDouble.NEGATIVE_INFINITY
。
IEEE 定義の定数 NaN などによる浮動小数点数。thst 値を含む継続的な操作は、最後まで変更されません。整数または整数は例外がスローされて異なります...Javaでは...
350/0 を実行した場合に 350 を返す言語があるとしたら、私は驚きます。ほんの 2 つの例ですが、Java はキャッチできる例外をスローします。C/C++ がクラッシュするだけです (おそらくキャッチできるシグナルをスローすると思います)。
Delphi では、コンパイル時エラー(0 値の const で割った場合)または実行時に発生した場合はキャッチ可能なランタイム エラーのいずれかをスローします。
C や C++ も同様です。
PHP では、次の警告が表示されます。
警告: <file.php>行Xのゼロ除算
したがって、PHP では次のようになります。
$i = 123 / 0;
$i は何も設定されません。しかし、$i は === NULL ではなく、isset($i) は true を返し、 is_string ($i) は false を返します。
ウィキペディアから:
拡張実数直線の無限大は、1 や 1.5 などの通常の浮動小数点値と同じように、IEEE 浮動小数点データ型で表すことができます。オーバーフローが発生した場合に置換値として使用されます。ゼロ除算の例外では、正または負の無限大が正確な結果として返されます。
Python (少なくともバージョン 2、3 はありません) は、キャッチできる ZeroDivisionError をスローします。
num = 42
try:
for divisor in (1,0):
ans = num / divisor
print ans
except ZeroDivisionError:
print "Trying to divide by 0!"
プリントアウト:
42
Trying to divide by 0!