java - 是否有算法来计算计算是否会溢出类型大小?
问题描述
是否有一种算法可以应用于大多数语言来确定执行时的计算是否会溢出类型大小?
作为一个例子,如果在 Java 中给出以下代码片段(尽管我再次寻找任何语言的通用方法)
long variable = 2;
while(true){
variable = variable * Generalclass.function();
}
假设 Generalclass.function() 将返回导致变量增加的东西,最终变量将溢出,那么如果 Generalclass.function() 的属性未知(除了增加的属性之外,如何确定此调用是否导致这种情况发生)变量的值)。请注意,变量被声明为 long,因此仅检查较大的数据类型将不起作用,因为不存在此类数据类型。
解决方案
对您的问题最直接的回答是“不,如果计算会溢出,没有算法可以计算”。每种类型的操作(加法、乘法等)对检测溢出条件都有独特的要求。在机器语言级别,一些处理器具有特殊的条件代码,可以检查算术运算是否溢出,但是在更高级别进行编码时,您无权访问它。
查看“Hacker's Delight”一书,了解一些检测溢出的算法。您可能还想查看各种 Java 数学“精确”方法的源代码。一些实现参考了 Hacker's Delight,其中许多还具有“内在”版本,这些实现被更快的低级替代实现所取代。
推荐阅读
- javascript - 如何使 npm 实时服务器在 vs 代码中工作?
- javascript - javascript document.createTextNode 返回
- python - 一次在多个图中循环绘制并在最后一次迭代中保存它们
- visual-studio - 我无法在 MAUI 安装期间修复这些错误
- oracle - Oracle 将管道功能合并到工作过程中
- python - Keras conv1D 中 model.fit 的 ValueError(预期 min_ndim=3,发现 ndim=2)
- redis - 自定义redis数据目录
- vuejs2 - vuejs flatpickr 值变化
- java - RuleUnit + Quarkus 示例缺少应该包含 KieServices 和 KieContainer 的 Java 文件 - 如果没有这些项目,它如何工作?
- javascript - 两个问题:顶部固定标题上的图像大于标题和两个部分不是从第一个元素开始