letmut uxi = x.to_bits(); letmut uyi = y.to_bits(); let uti; let ex: i64; let ey: i64; letmut z: f64;
/* arrange |x| >= |y| */
uxi &= -1i64 as u64 >> 1;
uyi &= -1i64 as u64 >> 1; if uxi < uyi {
uti = uxi;
uxi = uyi;
uyi = uti;
}
/* special cases */
ex = (uxi >> 52) as i64;
ey = (uyi >> 52) as i64;
x = f64::from_bits(uxi);
y = f64::from_bits(uyi); /* note: hypot(inf,nan) == inf */ if ey == 0x7ff { return y;
} if ex == 0x7ff || uyi == 0 { return x;
} /* note: hypot(x,y) ~= x + y*y/x/2 with inexact for small y/x */ /* 64 difference is enough for ld80 double_t */ if ex - ey > 64 { return x + y;
}
/* precise sqrt argument in nearest rounding mode without overflow */ /* xh*xh must not overflow and xl*xl must not underflow in sq */
z = 1.; if ex > 0x3ff + 510 {
z = x1p700;
x *= x1p_700;
y *= x1p_700;
} elseif ey < 0x3ff - 450 {
z = x1p_700;
x *= x1p700;
y *= x1p700;
} let (hx, lx) = sq(x); let (hy, ly) = sq(y);
z * sqrt(ly + lx + hy + hx)
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-18)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.