0

このようなforループでBean Shellインタープリターを使用しています

    for(int i = 0; i <functionSize; i++){
         interpreter.set("x", i);
         yvalues[i] = (Integer) interpreter.eval(functionString);
    }

私が抱えている問題は、関数 2^x を実行すると、本当に奇妙な出力が得られることです。最初のいくつかの y 値のリストは次のようになります: 2, 3, 0 , 1, 6, 7, 4, 5, 10 , 11, 8 , 9 ...

ビーン シェル インタープリターにパワーを正しく評価させる方法を知っている人はいますか?

編集:数学パーサーを作成する代わりに、Bean シェル インタープリターを使用したいと思います。Bean シェルで x の関数の累乗を評価する方法を知っている人はいますか?

4

2 に答える 2

4

2^xは、べき乗ではなく、ビットごとの XOR を表します。必要に応じて使用Math.pow(2,x)しますが、int ではなく double で動作することに注意してください。結果を整数としてキャストしようとすると、おそらく例外が発生する浮動小数点の答えが得られます。

編集: BigIntegerを返すBigInteger.pow()もあります。

または、2 の累乗が必要で、他の基数が必要ない場合は、左シフトの式を使用します: 1 << xfor x between 0 and 31.

于 2011-12-04T23:54:39.503 に答える
0

最終的に次のように編集しました:

 double y = Double.parseDouble(interpreter.eval(functionString).toString());
 yvalues[i] = (int) y;

そしてMath.pow(a, b)、私の入力として使用します。

見た目は良くありませんが、機能しています。

于 2011-12-05T15:08:23.323 に答える