2

Javascript

0/0       // NaN
0/0.0     // NaN
1/0.0     // Infinity
1/0.0     // Infinity

ルビー

>> 0/0     # ZeroDivisionError: divided by 0
>> 0/0.00  # NaN
>> 1/0.00  # Infinity
>> -1/0.00 # -Infinity

パイソン

>>> 0/0    # ZeroDivisionError: integer division or modulo by zero
>>> 0/0.0  # ZeroDivisionError: integer division or modulo by zero
>>> 1/0.0  # ZeroDivisionError: integer division or modulo by zero
>>> -1/0.0 # ZeroDivisionError: integer division or modulo by zero

背後にある理由は何ですか

整数はゼロで割ることはできませんが、浮動小数点数はできますか?

Python では、NaN や Infinity ではなく、すべてのエラーが発生するのはなぜですか?

4

3 に答える 3

3

浮動小数点のゼロ除算は多くの環境で例外になる可能性があります(有効になっている場合)が、IEEE floatにはいくつかの例外値(Inf、など)を表現する機能があるため、ゼロ除算で例外Nanを返すこともできます。これは整数演算では不可能です。 。

また、さまざまな言語でさまざまな構文解析(またはプロモーション?)を観察しています。0ただし、 JavaScriptのベア、整数のゼロではなく浮動小数点0です。

于 2013-02-21T23:13:52.587 に答える
2

言語が異なれば、選択も異なります。

Javascript の場合は簡単です。整数は float として格納され、除算に関するIEEE-754規則に従うことを選択しました。

0Python では、または による除算が禁止されているよう0.0です。この SO question でこれを回避する方法を参照してください。

Ruby では、 (または)0のように正確な値と浮動小数点数を区別しています。実際、浮動小数点数の精度内で表現できない非常に小さな正の数を表すことができます (例: )。は大きすぎて他のフロートで表すことができないため、を返すのはこのビューです。0.0-0.00.00.1e-4001/0.1e-400Float::INFINITY1e401

Rubyには、実際には2つの異なる比較演算子があり、それを区別しています:

0 == 0.0 # => true
0.eql?(0.0) # => false

これにより、いくつかの重要な結果が生じる可能性があります。

h = {0 => :foo}
h[0.0] # => nil
于 2013-02-21T23:24:29.290 に答える
1

Python では、NaN や Infinity ではなく、すべてのエラーが発生するのはなぜですか?

Python の特定のモジュールには、適切な場合にこれがあります。

In [1]: import numpy as np

In [2]: a = np.arange(3)

In [3]: b = np.ones(3)

In [4]: b/a
Out[4]: array([ inf,  1. ,  0.5])
于 2013-02-21T23:24:12.353 に答える