diff --git a/libc/math.h b/libc/math.h index 0087f694c..e49e3f612 100644 --- a/libc/math.h +++ b/libc/math.h @@ -64,6 +64,8 @@ #define FP_ZERO 2 #define FP_SUBNORMAL 3 #define FP_NORMAL 4 +#define FP_ILOGB0 (-2147483647-1) +#define FP_ILOGBNAN (-2147483647-1) #if !(__ASSEMBLER__ + __LINKER__ + 0) COSMOPOLITAN_C_START_ diff --git a/test/libc/tinymath/logb_test.c b/test/libc/tinymath/logb_test.c index 0a6c54e1d..73abda775 100644 --- a/test/libc/tinymath/logb_test.c +++ b/test/libc/tinymath/logb_test.c @@ -49,3 +49,14 @@ TEST(logb, yolo) { EXPECT_EQ(2, (int)logbl(4)); EXPECT_EQ(63, (int)logbl(1e19)); } + +TEST(ilogb, NANandZero) { + EXPECT_EQ(FP_ILOGB0, ilogb(0.0)); + EXPECT_EQ(FP_ILOGBNAN, ilogb(NAN)); + EXPECT_EQ(FP_ILOGB0, (int)ilogb(0)); + EXPECT_EQ(FP_ILOGBNAN, (int)ilogb(NAN)); + EXPECT_EQ(FP_ILOGB0, ilogbf(0)); + EXPECT_EQ(FP_ILOGBNAN, ilogbf(NAN)); + EXPECT_EQ(FP_ILOGB0, ilogbl(0)); + EXPECT_EQ(FP_ILOGBNAN, ilogbl(NAN)); +}