ばかげていると思いますが、間隔の乗算はそれ自体の高低を使用しないため、数値が正である限り、定義により、低低の結果は低*低および高*高になります。数値が常に正であることを明確に知っている限り(時間を使用しているように)、これを行うことができます:
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);
}
ビットごとの演算子を使用してこれらの比較を行うより良い方法があるかもしれませんが、その方法はわかりません。