dladiv function
Implementation
void dladiv(
final double A,
final double B,
final double C,
final double D,
final Box<double> P,
final Box<double> Q,
) {
const BS = 2.0, HALF = 0.5, TWO = 2.0;
final AA = Box(A);
final BB = Box(B);
var CC = C;
var DD = D;
var AB = max(A.abs(), B.abs());
var CD = max(C.abs(), D.abs());
var S = 1.0;
final OV = dlamch('Overflow threshold');
final UN = dlamch('Safe minimum');
final EPS = dlamch('Epsilon');
final BE = BS / (EPS * EPS);
if (AB >= HALF * OV) {
AA.value *= HALF;
BB.value *= HALF;
S *= TWO;
}
if (CD >= HALF * OV) {
CC *= HALF;
DD *= HALF;
S *= HALF;
}
if (AB <= UN * BS / EPS) {
AA.value *= BE;
BB.value *= BE;
S /= BE;
}
if (CD <= UN * BS / EPS) {
CC *= BE;
DD *= BE;
S *= BE;
}
if (D.abs() <= C.abs()) {
dladiv1(AA, BB.value, CC, DD, P, Q);
} else {
dladiv1(BB, AA.value, DD, CC, P, Q);
Q.value = -Q.value;
}
P.value *= S;
Q.value *= S;
}