gpt4 book ai didi

带有发条模数语句的 Java 整数最大值测试返回不正确的值

转载 作者:行者123 更新时间:2023-11-30 10:57:13 24 4
gpt4 key购买 nike

在类里面,我们目前正在使用“顺时针”模数函数 - 也就是说,该函数的工作原理与 Math.floorMod(int a, int b) 基本相同。

对于类,我不能使用Math.floorMod(),我研究了这个话题后写了这个:

 /**
* Computes {@code a} mod {@code b} as % should have been defined to work.
*
* @param a
* the number being reduced
* @param b
* the modulus
* @return the result of a mod b, which satisfies 0 <= {@code mod} < b
* @requires b > 0
* @ensures
*
* <pre>
* 0 <= mod and mod < b and
* there exists k: integer (a = k * b + mod)
* </pre>
*/
public static int mod(int a, int b) {
assert b > 0 : "Violation of: b > 0";
return (((a % b) + b) % b);
}

这是我的问题。这个函数传递了我抛给它的所有情况,除了一个,其中 a = 2 和 b = INTEGER.MAX_VALUE。

那应该像 floorMod 一样返回 2,但是它返回 0。无论如何我可以在不使用 floorMod 的情况下解决这个问题吗?

提前致谢。

最佳答案

((a % b) + b)  // this does 2 + INTEGER.MAX and leads to an overflow

您可以使用以下方法来处理此问题并仍然保留 int 值:

public static int mod(int a, int b) {
assert b > 0 : "Violation of: b > 0";
return (int) (( (long) (a % b) + b) % b );
}

关于带有发条模数语句的 Java 整数最大值测试返回不正确的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32707213/

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