我目前正在创建一个编译器,并且还希望实现零除。我注意到python中的十进制模块,并认为它可能很有用。下面的代码显示了我想要了解的内容。无论如何要分割表达式并检查负数和正数的0除法?提前谢谢。
if input negative int/0 = -infin
if pos int/0 = infin
if 0/0 = null
等。
答案 0 :(得分:0)
python documentation表示默认行为是引发异常。
>>> import decimal
>>> D = decimal.Decimal
>>> a = D("12")
>>> b = D("0")
>>> a/b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/decimal.py", line 1350, in __truediv__
return context._raise_error(DivisionByZero, 'x / 0', sign)
File "/usr/lib/python3.4/decimal.py", line 4050, in _raise_error
raise error(explanation)
decimal.DivisionByZero: x / 0
>>>
但是,而不是提出异常:
如果没有捕获此信号,则返回Infinity或-Infinity 符号由计算输入决定。
从零除零开始,它没有数学定义,所以我不知道你可能想用它做什么。 Python会返回另一个异常:
>>> b/b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.4/decimal.py", line 1349, in __truediv__
return context._raise_error(DivisionUndefined, '0 / 0')
File "/usr/lib/python3.4/decimal.py", line 4050, in _raise_error
raise error(explanation)
decimal.InvalidOperation: 0 / 0
>>>
如果信号没有被捕获,则返回NaN。 (可能无法知道操作是否为0除以零)。