69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
|
|
class Uncertain {
|
||
|
|
constructor(num, err) {
|
||
|
|
this.num = num;
|
||
|
|
this.err = err;
|
||
|
|
}
|
||
|
|
|
||
|
|
add(x) {
|
||
|
|
try {
|
||
|
|
const res = new Uncertain(this.num + x.num, Math.hypot(this.err, x.err));
|
||
|
|
return res;
|
||
|
|
} catch {
|
||
|
|
const res = new Uncertain(this.num + x, this.err);
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
sub(x) {
|
||
|
|
try {
|
||
|
|
const res = new Uncertain(this.num - x.num, Math.hypot(this.err, x.err));
|
||
|
|
return res;
|
||
|
|
} catch {
|
||
|
|
const res = new Uncertain(this.num - x, this.err);
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
mul(x) {
|
||
|
|
try {
|
||
|
|
const f = this.num * x.num;
|
||
|
|
const sq = Math.hypot(this.err / this.num, x.err / x.num);
|
||
|
|
const res = new Uncertain(f, f * sq);
|
||
|
|
return res;
|
||
|
|
} catch {
|
||
|
|
const res = new Uncertain(this.num * x, Math.abs(this.err * x));
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
div(x) {
|
||
|
|
try {
|
||
|
|
const f = this.num / x.num;
|
||
|
|
const sq = Math.hypot(this.err / this.num, x.err / x.num);
|
||
|
|
const res = new Uncertain(f, f * sq);
|
||
|
|
return res;
|
||
|
|
} catch {
|
||
|
|
const res = new Uncertain(this.num / x, Math.abs(this.err / x));
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
pow(x) {
|
||
|
|
const f = this.num ** x;
|
||
|
|
const res = new Uncertain(f, Math.abs(f * x * this.err / this.num));
|
||
|
|
return res;
|
||
|
|
}
|
||
|
|
|
||
|
|
print() {
|
||
|
|
console.log(`${this.num} +/- ${this.err}`);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
const x1 = new Uncertain(100, 1.1);
|
||
|
|
const y1 = new Uncertain(50, 1.2);
|
||
|
|
const x2 = new Uncertain(200, 2.2);
|
||
|
|
const y2 = new Uncertain(100, 2.3);
|
||
|
|
|
||
|
|
const d = x1.sub(x2).pow(2).add(y1.sub(y2).pow(2)).pow(0.5);
|
||
|
|
d.print();
|