乘以间隔

时间:2013-02-10 01:47:55

标签: java

我正在尝试创建此方法,但由于某种原因它无法正常工作......

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有关,但我查了一下,所以我不确定我是怎么没有正确使用它的?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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);
}

使用按位运算符可能有更好的方法来完成这些比较,但我不知道如何。