More precise vector length computation
This commit is contained in:
parent
e9b408ef77
commit
1bebfebb6d
1 changed files with 12 additions and 1 deletions
|
|
@ -201,10 +201,21 @@ namespace psemek::geom
|
|||
return dot(v, v);
|
||||
}
|
||||
|
||||
template <typename T, std::size_t N>
|
||||
T linf_norm(vector<T, N> const & v)
|
||||
{
|
||||
T r = std::abs(v[0]);
|
||||
for (std::size_t i = 1; i < N; ++i)
|
||||
r = std::max(r, std::abs(v[i]));
|
||||
return r;
|
||||
}
|
||||
|
||||
template <typename T, std::size_t N>
|
||||
T length(vector<T, N> const & v)
|
||||
{
|
||||
return std::sqrt(length_sqr(v));
|
||||
T const m = linf_norm(v);
|
||||
if (m == 0) return m;
|
||||
return m * std::sqrt(length_sqr(v / m));
|
||||
}
|
||||
|
||||
template <typename T, std::size_t N>
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue