假设你有两个数字,对于每个典型的数学运算,是否有可能预测(不会有显著的开销)这些操作是否会导致溢出,而这些数字就是当前所表示的类型?
假设你有两个数字,对于每个典型的数学运算,是否有可能预测(不会有显著的开销)这些操作是否会导致溢出,而这些数字就是当前所表示的类型?
是的。
为了简单起见,假设溢出发生在100处。
a * b >= 100
,我们会有溢出。
因此,对于a = n
,如果b >= 100 / n
,我们就会有溢出。如果a
或b
为0,则不会发生溢出。
对于任何需要增加右侧常量的数学设置,这种方法都不适用,因为您的溢出检测会溢出。然而,每个操作的任何给定步骤都可能会溢出,因此您确实需要在机器级别而不是算法级别上在进行每次加法和乘法之前检查。因此,您需要将问题分成最小的已知数量,以有效地使用此溢出检测。
我宁愿让语言抛出异常,但这只是我的个人意见。
求和:
MAX_NUMBER - A < B
会发生溢出
打开溢出保护,然后进行操作。如果引发了溢出异常,或者错误寄存器设置了溢出位,或者无论你的环境如何告诉你有问题,那么你就知道如果再次执行相同操作,将会发生溢出。