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