Polyhedral Homotopy Continuation Method for solving sparse polynomial system, optimized by only tracing real zeros
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

87 lines
3.0 KiB

// This file is part of Bertini 2.
//
// fixed_precision_utilities.hpp is free software: you can redistribute it
// and/or modify it under the terms of the GNU General Public License as
// published by the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// fixed_precision_utilities.hpp is distributed in the hope that it will be
// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with fixed_precision_utilities.hpp. If not, see
// <http://www.gnu.org/licenses/>.
//
// Copyright(C) 2015 - 2021 by Bertini2 Development Team
//
// See <http://www.gnu.org/licenses/> for a copy of the license,
// as well as COPYING. Bertini2 is provided with permitted
// additional terms in the b2/licenses/ directory.
// individual authors of this file include:
// silviana amethyst, university of wisconsin eau claire
// Tim Hodges, Colorado State University
#pragma once
#include "trackers/config.hpp"
namespace bertini {
namespace tracking {
namespace fixed {
inline void SetPrecision(SampCont<mpfr_complex>& samples, unsigned prec) {
for (auto& s : samples)
for (unsigned ii = 0; ii < s.size(); ii++) s(ii).precision(prec);
}
inline void SetPrecision(TimeCont<mpfr_complex>& times, unsigned prec) {
for (auto& t : times) t.precision(prec);
}
inline unsigned MaxPrecision(SampCont<mpfr_complex> const& samples) {
unsigned max_precision = 0;
for (auto& s : samples)
if (Precision(s(0)) > max_precision) max_precision = Precision(s(0));
return max_precision;
}
inline unsigned MaxPrecision(TimeCont<mpfr_complex> const& times) {
unsigned max_precision = 0;
for (auto& t : times)
if (Precision(t) > max_precision) max_precision = Precision(t);
return max_precision;
}
// does not a thing, because cannot.
inline unsigned EnsureAtUniformPrecision(TimeCont<dbl> const& times,
SampCont<dbl> const& derivatives) {
return DoublePrecision();
}
inline unsigned EnsureAtUniformPrecision(TimeCont<dbl> const& times,
SampCont<dbl> const& samples,
SampCont<dbl> const& derivatives) {
return DoublePrecision();
}
// changes precision of mpfr_complex to highest needed precision for the
// samples.
inline unsigned EnsureAtUniformPrecision(
TimeCont<mpfr_complex> const& times,
SampCont<mpfr_complex> const& samples) {
return MaxPrecision(samples);
}
// returns max precision of all samples.
inline unsigned EnsureAtUniformPrecision(
TimeCont<mpfr_complex> const& times, SampCont<mpfr_complex> const& samples,
SampCont<mpfr_complex> const& derivatives) {
return max(MaxPrecision(samples), MaxPrecision(derivatives));
}
} // namespace fixed
} // namespace tracking
} // namespace bertini