pow function
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;
}