pow function

BigDouble pow(
  1. BigDouble value,
  2. dynamic t, [
  3. double? tolerance
])

Raises a BigDouble value to power (ie value ^ t). Exponentiation

Implementation

BigDouble pow(BigDouble value, dynamic t, [double? tolerance]) {
  if (!(t is BigDouble) && !(t is num)) {
    throw "pow() accepts either a power of [BigDouble] or [num]!";
  }
  double power = t is BigDouble
      ? t.toDouble()
      : t is int
          ? t.toDouble()
          : t;
  int temp = (value.exponent * power).toInt();
  late double newMantissa;
  if (CasualNumerics.isSafe(temp)) {
    newMantissa = dart_math.pow(value.mantissa, power).toDouble();
    if (newMantissa.isFinite && newMantissa != 0) {
      return BigDouble(newMantissa, temp);
    }
  }
  int newExp = temp.toInt();
  int residue = temp - newExp;
  newMantissa = dart_math
      .pow(10, power * CasualNumerics.log10(value.mantissa) + residue)
      .toDouble();
  if (newMantissa.isFinite && newMantissa != 0) {
    return BigDouble(newMantissa, newExp);
  }
  BigDouble res = pow10(power * absLog10(value));
  if (value.sign == -1) {
    if ((temp % 2).abs() == 1) {
      return -res;
    } else if ((temp % 2).abs() == 0) {
      return res;
    }
    return BigDouble.nan;
  }
  return res;
}