整数(一次元座標)
浮動小数点比較を行えるよう、Numberを拡張する。
code: geometry.ts
export const EPS = 1e-9;
declare global {
interface Number {
eq(y: number): boolean;
sign(): number;
in(a: number, b: number): boolean;
}
}
/**
* 呼び出し元の値と引数が等しいかを判定します
* 浮動小数点誤差に対応しています。
* @param y 比較する値
*/
Number.prototype.eq = function (y: number): boolean {
const x: number = this.valueOf();
return Math.abs(x - y) < EPS;
};
/**
* 呼び出し元の値の符号を求めます。浮動小数点誤差に対応しています。
* @returns 正ならば1, 負ならば -1, 0に近ければ 0
*/
Number.prototype.sign = function (): number {
const x: number = this.valueOf();
if (x > EPS) {
return 1;
}
if (x < EPS) {
return -1;
}
return 0;
};
/**
* 呼び出し元の値が開区間aとbの間に含まれるかどうかを判定します
* 浮動小数点誤差に対応しています。
* @param a min
* @param b max
*/
Number.prototype.in = function (a: number, b: number): boolean {
const x: number = this.valueOf();
return a + EPS < x && x < b - EPS;
};