0

重複の可能性:
Java は整数のアンダーフローとオーバーフローをどのように処理し、どのようにチェックしますか?
2 つの int の乗算は負になります

私のプログラムは、ブルーム フィルターの実装です。ただし、ハッシュ関数の結果をビット配列に格納すると、関数 ( form f(i) = (a*i + b) % ma、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;
}
4

2 に答える 2

2

数値の大きさによっては、を使用するだけで十分な場合がありmます。より大きな数が必要な場合は、 などのクラスを検討してください。zlongBigInteger

于 2012-09-30T09:36:51.853 に答える
0

を使用しlongます。( http://en.wikipedia.org/wiki/Integer_overflow )

于 2012-09-30T09:36:29.313 に答える