/// <summary> /// 指定された 2つの<see cref="Vector"/> が等しいかどうかを示す. /// </summary> /// <param name="left"><see cref="Vector"/></param> /// <param name="right"><see cref="Vector"/></param> /// <param name="delta"> /// 各要素の値が同等であるとみなされる差異の閾値(> 0) /// (<c><see cref="System.Math.Abs(double)"/>(<paramref name="left"/>[i] - <paramref name="right"/>[i]) < <paramref name="delta"/></c>であれば同等とみなす) /// </param> /// <returns>等しければ<c>true</c>を,それ以外の場合は<c>false</c>を返す.</returns> public static bool Equals(Vector left, Vector right, double delta) { if (object.ReferenceEquals(left, right)) { return(true); } if (left == null || right == null) { return(false); } if (left.Size != right.Size) { return(false); } return(delta < 0 ? VectorImpl.HaveSameValues(left, right) : VectorImpl.HaveSameValues(left, right, delta)); }
/// <summary> /// 指定された複数の<see cref="IVector"/>インタフェースを実装したオブジェクトにおいて, /// それらが同じ要素値を持っているかどうかを判定する. /// </summary> /// <param name="vectors">可変個の<see cref="IVector"/>インタフェースを実装したオブジェクト</param> /// <returns> /// 全てのオブジェクトにおいて,全ての要素値が一致すれば<c>true</c>を,それ以外は<c>false</c>を返す. /// </returns> public static bool HaveSameValues(params IVector[] vectors) { if (vectors == null) { return(false); // 値を持たないから } if (vectors.Length <= 1) { return(true); } IVector criterion = vectors[0]; for (int i = 1; i < vectors.Length; ++i) { if (!VectorImpl.HaveSameValues(criterion, vectors[i])) { return(false); } } return(true); }