YanesdkのDistanceメソッドの誤差

誤差率のグラフ(X:0〜45°,Y:0〜1)

Yanesdk.NET*1Yanesdk.Math.Vector2D.Distanceは、次のように実装されている。

/// <summary>
/// 近似による距離(絶対値)の算出。sqrtを使っていない分だけ速い
/// </summary>
/// <param name="v"></param>
/// <returns></returns>
public double Distance(Vector2D v) {
	double ax = global::System.Math.Abs(X - v.X);
	double ay = global::System.Math.Abs(Y - v.Y);
	if ( ax > ay ) {
		return ax + ay / 2;
	} else {
		return ay + ax / 2;
	}
}

近似をせず素直に計算するなら当然 sqrt(ax*ax+ay*ay) となるので、 ax > ay の範囲では誤差率は以下のようになる。
\frac{(ax+ay/2)-\sqrt{ax^2+ay^2}}{\sqrt{ax^2+ay^2}}
でまあ、new Vector2D(ax, ay) がX軸と為す角をθとするならば、先ほどの式は以下のようになる。
cos\theta+\frac{1}{2}sin\theta-1
細かい計算はしていないが最大12%程度の誤差になるようだ。

*1:バージョンは1.03