detCbrt function

double detCbrt(
  1. double x
)

Cube root, sign-matched (detCbrt(-8) == -2): range reduction by 8, then 7 Newton steps. Max relative error vs pow ≈ 3.2e-16.

Implementation

double detCbrt(double x) {
  if (x == 0 || x.isNaN || x.isInfinite) return x;
  final neg = x < 0;
  var a = neg ? -x : x;
  var scale = 1.0;
  while (a >= 8.0) {
    a *= 0.125;
    scale *= 2.0;
  }
  while (a < 1.0) {
    a *= 8.0;
    scale *= 0.5;
  }
  var y = 1.0 + (a - 1.0) / 7.0;
  for (var i = 0; i < 7; i++) {
    y = y - (y * y * y - a) / (3.0 * y * y);
  }
  final r = y * scale;
  return neg ? -r : r;
}