Java 相乘间隔
我正在尝试创建此方法,但由于某些原因,它不起作用Java 相乘间隔,java,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 Int
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有关,但我查找了它,所以我不确定我是如何正确使用它的???丑陋,但是:
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);
可以说我疯了,但是因为区间的乘法从来没有使用它自己的高和低,根据定义,低和高的结果将是低*低和高*高,只要数字是正数。只要您明确知道数字始终为正(就像您正在使用时间),您可以这样做:
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);
}
公共静态区间乘法(区间x、区间y){
int min=(x.lo*y.lo=x.hi*y.hi)?max:x.hi*y.hi;
返回新间隔(最小、最大);
}
可能有更好的方法使用位运算符来完成这些比较,但我不知道如何。函数
Math.min
和Math.max
只使用两个参数。这是你真正的密码吗?如果是的话,它是不可编译的。只是出于好奇,你在用Joda吗?