我不太清楚「保守」是什麼意思,但我想添加到原型數組應該比創建自定義對象更快,而且您只需要實現所需的方法。
Array.prototype._interval_plus = function (arr2) {
return [this[0] + arr2[0], this[1] + arr2[1]];
};
Array.prototype._interval_minus = function (arr2) {
return [this[0] - arr2[0], this[1] - arr2[1]];
};
Array.prototype._interval_multiply = function (arr2) {
var ac = this[0] * arr2[0],
ad = this[0] * arr2[1],
bc = this[1] * arr2[0],
bd = this[1] * arr2[1];
return [Math.min(ac, ad, bc, bd), Math.max(ac, ad, bc, bd)];
};
Array.prototype._interval_divide = function (arr2) {
var ac, ad, bc, bd;
if (arr2[0] === 0 || arr2[1] === 0)
throw new Error('division by zero');
ac = this[0]/arr2[0],
ad = this[0]/arr2[1],
bc = this[1]/arr2[0],
bd = this[1]/arr2[1];
return [Math.min(ac, ad, bc, bd), Math.max(ac, ad, bc, bd)];
};
Array.prototype._interval_pow = function (arr2, pow) {
var ac = this[0] * Math.pow(arr2[0], pow),
ad = this[0] * Math.pow(arr2[1], pow),
bc = this[1] * Math.pow(arr2[0], pow),
bd = this[1] * Math.pow(arr2[1], pow);
return [Math.min(ac, ad, bc, bd), Math.max(ac, ad, bc, bd)];
};
現在你可以像
var x = [ 0 , 1 ];
y = [ 0.5, 3.5];
x._interval_plus(y) // [ 0.5 , 4.5 ]
._interval_multiply(y) // [ 0.25, 15.75]
._interval_minus(y) // [-0.25, 12.25]
._interval_pow(y, 2); // [-3.0625, 150.0625]
'區間和包含實數的所有和'在任何兩個實數之間有無限多的實數,所以這總是_Infinity_,不是? –
@ PaulS.--是的,沒有。 – RobG
@PaulS:這可能有助於思考「保守整數算術」的更簡單的例子。例如,在保守整數運算中[2,10]/[3,3] = [0,4],因爲非整數邊界向外舍入([2/3,10/3]不是整數間隔)。 –