重複の可能性:
Java は整数のアンダーフローとオーバーフローをどのように処理し、どのようにチェックしますか?
2 つの int の乗算は負になります
私のプログラムは、ブルーム フィルターの実装です。ただし、ハッシュ関数の結果をビット配列に格納すると、関数 ( form f(i) = (a*i + b) % m
a、b、i、m はすべて正の整数) が負の結果を返します。問題は、負になる a*i の計算にあるようです。
コード内の print ステートメントは無視してください。それらはデバッグ用でした。基本的に、このコード ブロックの temp の値は負になるので、ArrayOutOfBoundsException
.
m
はビット配列の長さ、z
は使用されているハッシュ関数の数、S
はこのブルーム フィルタのメンバーである値のセットでH
、ハッシュ関数 f1、f2、...、fz の a と b の値を格納します。
public static int[] makeBitArray(int m, int z, ArrayList<Integer> S, int[] H)
{
int[] C = new int[m];
for (int i = 0; i < z; i++)
{
for (int q = 0; q < S.size() ; q++)
{
System.out.println(H[2*i]);
int temp = S.get(q)*(H[2*i]);
System.out.println(temp);
System.out.println(S.get(q));
System.out.println(H[2*i + 1]);
System.out.println(m);
int t = ((H[2*i]*S.get(q)) + H[2*i + 1])%m;
System.out.println(t);
C[t] = 1;
}
}
return C;
}