/// Arctangent (f32) /// /// Computes the inverse tangent (arc tangent) of the input value. /// Returns a value in radians, in the range of -pi/2 to pi/2. #[cfg_attr(all(test, assert_no_panic), no_panic::no_panic)] pubfn atanf(mut x: f32) -> f32 { let x1p_120 = f32::from_bits(0x03800000); // 0x1p-120 === 2 ^ (-120)
let z: f32;
letmut ix = x.to_bits(); let sign = (ix >> 31) != 0;
ix &= 0x7fffffff;
if ix >= 0x4c800000 { /* if |x| >= 2**26 */ if x.is_nan() { return x;
}
z = i!(ATAN_HI, 3) + x1p_120; returnif sign { -z } else { z };
} let id = if ix < 0x3ee00000 { /* |x| < 0.4375 */ if ix < 0x39800000 { /* |x| < 2**-12 */ if ix < 0x00800000 { /* raise underflow for subnormal x */
force_eval!(x * x);
} return x;
}
-1
} else {
x = fabsf(x); if ix < 0x3f980000 { /* |x| < 1.1875 */ if ix < 0x3f300000 { /* 7/16 <= |x| < 11/16 */
x = (2. * x - 1.) / (2. + x); 0
} else { /* 11/16 <= |x| < 19/16 */
x = (x - 1.) / (x + 1.); 1
}
} elseif ix < 0x401c0000 { /* |x| < 2.4375 */
x = (x - 1.5) / (1. + 1.5 * x); 2
} else { /* 2.4375 <= |x| < 2**26 */
x = -1. / x; 3
}
}; /* end of argument reduction */
z = x * x; let w = z * z; /* break sum from i=0 to 10 aT[i]z**(i+1) into odd and even poly */ let s1 = z * (i!(A_T, 0) + w * (i!(A_T, 2) + w * i!(A_T, 4))); let s2 = w * (i!(A_T, 1) + w * i!(A_T, 3)); if id < 0 { return x - x * (s1 + s2);
} let id = id as usize; let z = i!(ATAN_HI, id) - ((x * (s1 + s2) - i!(ATAN_LO, id)) - x); if sign {
-z
} else {
z
}
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.10 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.