Skip to content

Commit

Permalink
Merge pull request #14769 from bangerth/fixed-power
Browse files Browse the repository at this point in the history
Fix an assertion.
  • Loading branch information
tjhei committed Feb 9, 2023
2 parents b484371 + f18f24d commit 79716c6
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions include/deal.II/base/utilities.h
Original file line number Diff line number Diff line change
Expand Up @@ -968,17 +968,20 @@ namespace Utilities
inline T
fixed_power(const T x)
{
Assert(
!std::is_integral<T>::value || (N >= 0),
ExcMessage(
"The non-type template parameter N must be a non-negative integer for integral type T"));
Assert(((std::is_integral<T>::value == true) && (N >= 0)) ||
(std::is_integral<T>::value == false),
ExcMessage("If the type of the argument, T, is an integer type, "
"then the exponent N must be a non-negative integer "
"because the result would otherwise not be an integer."));

if (N == 0)
return T(1.);
else if (N < 0)
// For negative exponents, turn things into a positive exponent
return T(1.) / fixed_power<-N>(x);
else
// Use exponentiation by squaring:
// If we get here, we have a positive exponent. Compute the result
// by repeated squaring:
return ((N % 2 == 1) ? x * fixed_power<N / 2>(x * x) :
fixed_power<N / 2>(x * x));
}
Expand Down

0 comments on commit 79716c6

Please sign in to comment.