yosuke_furukawa:> behavioural subtyping
> の話で「事後条件としてある一定の精度を保証する関数を持つ型から別の型を派生させる場合、派生型での実装では同程度かより高い精度を保証しなければならない」
これは、派生させた方のメソッドは派生元のメソッドよりも何かが良くなっていないといけないという事だと思っています。派生元に同じメソッドがあるのに、そっちよりも派生させた方が精度も計算量が低かったら使うのに躊躇しますよね。一方で、現実ではそこまで全ての条件で派生先がうまくいくケースは少ないと思います。
派生型が実装するものの中には精度を犠牲にして計算量を減らすものや、計算量を犠牲にして精度を上げるもの、精度も計算量も改善するけどシステムリソースの量が増えるものなど色々なトレードオフが存在します。
なので、あとから良い実装を提供するというより、「このシーンだと派生させた方のやり方のがハマる」みたいなシーンで派生型のメソッドを提供する事はありえると思います。一般的なケースでは派生元の方法で十分だが、特殊なケースでは派生先の方が良いというシーンですね。
ただ最近だと、精度を犠牲にするケースでは別なメソッド作ってしまうやり方のが一般的かもしれません。 Rust に sort と sort_unstable
があるのですが、 sort は安定ソートを指し、 sort_unstable は安定していないソートを指しています。三角関数でも精度が変わるものに関しては
sin_imprecise とか cos_inaccurate とかそういう名前をつけたほうがいいのかもしれないですね。