【发布时间】:2023-03-28 13:04:02
【问题描述】:
我目前正在创建一个编译器,并且还想实现除零。我注意到 python 中的十进制模块并认为它可能很有用。下面的代码显示了我想要了解的内容。无论如何要拆分表达式并检查负数和正数的除法 0 吗?提前致谢。
if input negative int/0 = -infin
if pos int/0 = infin
if 0/0 = null
等等。
【问题讨论】:
我目前正在创建一个编译器,并且还想实现除零。我注意到 python 中的十进制模块并认为它可能很有用。下面的代码显示了我想要了解的内容。无论如何要拆分表达式并检查负数和正数的除法 0 吗?提前致谢。
if input negative int/0 = -infin
if pos int/0 = infin
if 0/0 = null
等等。
【问题讨论】:
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。 (知道操作是否是零除以零可能没有用)。
【讨论】: