fp16/bf16: fix NumTraits<half>::epsilon, half GPU raw-bit interop, RVV10 bf16 masks, and 16-bit normal RNG

libeigen/eigen!2704

Co-authored-by: Rasmus Munk Larsen <rmlarsen@gmail.com>
This commit is contained in:
Rasmus Munk Larsen
2026-07-10 14:55:30 -07:00
co-authored by Rasmus Munk Larsen
parent c453a87216
commit 40e7e38646
12 changed files with 311 additions and 22 deletions
+7
View File
@@ -181,6 +181,13 @@ void test_numtraits() {
VERIFY(NumTraits<bfloat16>::IsSigned);
// The bfloat16 machine epsilon is 2^-7 = 0x3c00, and NumTraits must agree
// with std::numeric_limits.
VERIFY_BFLOAT16_BITS_EQUAL(NumTraits<bfloat16>::epsilon(), 0x3c00);
VERIFY_BFLOAT16_BITS_EQUAL(std::numeric_limits<bfloat16>::epsilon(), 0x3c00);
VERIFY_IS_EQUAL(numext::bit_cast<numext::uint16_t>(NumTraits<bfloat16>::epsilon()),
numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::epsilon()));
VERIFY_IS_EQUAL(numext::bit_cast<numext::uint16_t>(std::numeric_limits<bfloat16>::infinity()),
numext::bit_cast<numext::uint16_t>(bfloat16(std::numeric_limits<float>::infinity())));
// There is no guarantee that casting a 32-bit NaN to bfloat16 has a precise