首页 > 解决方案 > 是否有算法来计算计算是否会溢出类型大小?

问题描述

是否有一种算法可以应用于大多数语言来确定执行时的计算是否会溢出类型大小?

作为一个例子,如果在 Java 中给出以下代码片段(尽管我再次寻找任何语言的通用方法)

long variable = 2;
while(true){
    variable = variable * Generalclass.function();
}

假设 Generalclass.function() 将返回导致变量增加的东西,最终变量将溢出,那么如果 Generalclass.function() 的属性未知(除了增加的属性之外,如何确定此调用是否导致这种情况发生)变量的值)。请注意,变量被声明为 long,因此仅检查较大的数据类型将不起作用,因为不存在此类数据类型。

标签: javacomputer-science

解决方案


对您的问题最直接的回答是“不,如果计算会溢出,没有算法可以计算”。每种类型的操作(加法、乘法等)对检测溢出条件都有独特的要求。在机器语言级别,一些处理器具有特殊的条件代码,可以检查算术运算是否溢出,但是在更高级别进行编码时,您无权访问它。

查看“Hacker's Delight”一书,了解一些检测溢出的算法。您可能还想查看各种 Java 数学“精确”方法的源代码。一些实现参考了 Hacker's Delight,其中许多还具有“内在”版本,这些实现被更快的低级替代实现所取代。


推荐阅读