gpt4 book ai didi

integer-arithmetic - 防止由二进制补码引起的不当行为

转载 作者:行者123 更新时间:2023-12-01 02:24:25 24 4
gpt4 key购买 nike

我阅读了以下问题:Value of i for (i == -i && i != 0) to return true in Java并留下了微微的眼花。

一读到spacecraft being lost由于使用了错误的单位系统,所以看到问题和 awnser 中提到的行为对我来说是非常意外的。

如何防止由此产生的错误/意外行为,而不会造成运行时损失? (我发现很难用 = 比较来想出有意义的代码,而我认为 abs 返回负值导致失败相当简单)。是否有异常可捕获?发出警告的短绒绒?

意外行为:

java abs()如果输入是最小负数,则返回最小负数。
-x=x 有除 0 以外的解,即二进制补码中的最小负数。

最佳答案

最佳做法是

  • 在您的系统中使用合理的类型。请注意,机器 int 不是数学整数。如果您的程序可能需要使用超出机器整数范围的数字,您应该使用大整数库,而不是机器整数。
  • 防御性编程。如果操作可能导致值超出范围,那么您应该在操作执行后明确检查这一点(或者,更好的是,在操作之前检查参数是否会导致错误)。

  • 当然,如果你做 2. 你仍然必须决定在发生错误时该怎么做,而 1 则不是。但是,在大多数语言中使用大整数会导致性能下降。该运行时惩罚是大于还是小于执行安全检查的惩罚可能取决于编程语言和程序的细节。

    最后,程序员的工作是对他们编写的代码负责。语言只能为您提供这么多帮助。

    关于integer-arithmetic - 防止由二进制补码引起的不当行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17788379/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com