我正在尝试创建此方法,但由于某种原因它无法正常工作......
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有关,但我查了一下,所以我不确定我是怎么没有正确使用它的?
答案 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);
}
使用按位运算符可能有更好的方法来完成这些比较,但我不知道如何。