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