157 T min_value, T max_value, T min_first_derivative_neg, T max_first_derivative_pos,
158 T min_first_derivative_pos, T max_first_derivative_neg, T min_second_derivative,
159 T max_second_derivative)
162 min_value, max_value, min_first_derivative_neg, max_first_derivative_pos,
163 min_first_derivative_pos, max_first_derivative_neg, min_second_derivative,
164 max_second_derivative);
170 T min_value, T max_value, T min_first_derivative_neg, T max_first_derivative_pos,
171 T min_first_derivative_pos, T max_first_derivative_neg, T min_second_derivative,
172 T max_second_derivative)
174 min_value_ = min_value;
175 max_value_ = max_value;
176 min_first_derivative_neg_ = min_first_derivative_neg;
177 max_first_derivative_pos_ = max_first_derivative_pos;
178 min_first_derivative_pos_ = min_first_derivative_pos;
179 max_first_derivative_neg_ = max_first_derivative_neg;
180 min_second_derivative_ = min_second_derivative;
181 max_second_derivative_ = max_second_derivative;
183 if (std::isnan(max_value_))
185 has_value_limits_ =
false;
187 if (std::isnan(min_value_))
189 min_value_ = -max_value_;
191 if (has_value_limits_ && min_value_ > max_value_)
193 throw std::invalid_argument(
"Invalid value limits");
196 if (std::isnan(max_first_derivative_pos_))
198 has_first_derivative_limits_ =
false;
200 if (std::isnan(min_first_derivative_neg_))
202 min_first_derivative_neg_ = -max_first_derivative_pos_;
204 if (has_first_derivative_limits_ && min_first_derivative_neg_ > max_first_derivative_pos_)
206 throw std::invalid_argument(
"Invalid first derivative limits");
208 if (has_first_derivative_limits_)
210 if (std::isnan(max_first_derivative_neg_))
212 max_first_derivative_neg_ = max_first_derivative_pos_;
214 if (std::isnan(min_first_derivative_pos_))
216 min_first_derivative_pos_ = min_first_derivative_neg_;
218 if (has_first_derivative_limits_ && min_first_derivative_pos_ > max_first_derivative_neg_)
220 throw std::invalid_argument(
"Invalid first derivative limits");
224 if (std::isnan(max_second_derivative_))
226 has_second_derivative_limits_ =
false;
228 if (std::isnan(min_second_derivative_))
230 min_second_derivative_ = -max_second_derivative_;
232 if (has_second_derivative_limits_ && min_second_derivative_ > max_second_derivative_)
234 throw std::invalid_argument(
"Invalid second derivative limits");