0

このメソッドを作成しようとしていますが、何らかの理由で機能しません...

public static Interval multiply(Interval x, Interval y) {
   int min = Math.min(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi);
   int max = Math.max(x.lo * y.lo, x.hi * y.hi, x.hi * y.lo, x.hi * y.hi);
   return new Interval(min, max);

Math.min/Math.max と関係があるのですが、調べてみたので使い方が間違っているのでしょうか??

4

2 に答える 2

1

醜いですが:

public static Interval multiply(Interval x, Interval y) {
   int min = Math.min(Math.min(Math.min(x.lo * y.lo, x.hi * y.hi), x.hi * y.lo), x.hi * y.hi);
   int max = Math.max(Math.max(Math.max(x.lo * y.lo, x.hi * y.hi), x.hi * y.lo), x.hi * y.hi);
   return new Interval(min, max);
于 2013-02-10T01:53:17.100 に答える
0

ばかげていると思いますが、間隔の乗算はそれ自体の高低を使用しないため、数値が正である限り、定義により、低低の結果は低*低および高*高になります。数値が常に正であることを明確に知っている限り(時間を使用しているように)、これを行うことができます:

public static Interval multiply(Interval x, Interval y){
   return new Interval(x.lo*y.lo, x.hi*y.hi);
}

よくわからない場合は、次の方法を試してみてください。

public static Interval multiply(Interval x, Interval y){
   int min = (x.lo*y.lo <= x.lo*y.hi) ? x.lo*y.lo: x.lo*y.hi;
   min = (min <= x.hi*y.lo) ? min: x.hi*y.lo;
   min = (min <= x.hi*y.hi) ? min: x.hi*y.hi;
   int max = (x.lo*y.lo >= x.lo*y.hi) ? x.lo*y.lo: x.lo*y.hi;
   max = (max >= x.hi*y.lo) ? max: x.hi*y.lo;
   max = (max >= x.hi*y.hi) ? max: x.hi*y.hi;
   return new Interval(min, max);
}

ビットごとの演算子を使用してこれらの比較を行うより良い方法があるかもしれませんが、その方法はわかりません。

于 2013-02-10T02:23:35.020 に答える