【问题标题】:Is there an algorithm to compute if a calculation will overflow a type size?是否有算法来计算计算是否会溢出类型大小?
【发布时间】:2021-10-22 13:41:48
【问题描述】:

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

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

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

假设 Generalclass.function() 将返回导致变量增加的东西,最终变量会溢出,那么如果 Generalclass.function() 的属性未知(properties除了增加变量的值)。请注意,变量声明为 long,因此仅检查较大的数据类型将不起作用,因为不存在此类数据类型。

【问题讨论】:

  • 考虑通过添加与您的问题相关的适用脚本或编程语言的标签来编辑您的问题。
  • 通常您知道结果应该落入的域:例如,此外,如果两个数字都是正数,则结果应该大于其中一个。如果结果不在预期的域中,则它已溢出。但是您只能通过实际执行计算来使用它。在计算和生活中一样,试图预测未来注定要失败。

标签: java computer-science


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-03
    • 1970-01-01
    • 1970-01-01
    • 2020-03-25
    • 2023-04-08
    • 2021-08-30
    相关资源
    最近更新 更多