[libc][obvious] Fix x86 long double conversion to integer.
authorSiva Chandra Reddy <sivachandra@google.com>
Wed, 19 Aug 2020 21:44:23 +0000 (14:44 -0700)
committerSiva Chandra Reddy <sivachandra@google.com>
Wed, 19 Aug 2020 21:48:55 +0000 (14:48 -0700)
Fixes incorrectly constructed ceill tests.

libc/test/src/math/ceill_test.cpp
libc/utils/FPUtil/LongDoubleBitsX86.h

index ad1e16b..c1a385f 100644 (file)
@@ -47,25 +47,25 @@ TEST(CeillTest, RoundedNumbers) {
 }
 
 TEST(CeillTest, Fractions) {
-  EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.5l));
+  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.5l));
   EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.5l));
-  EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.115l));
+  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.115l));
   EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.115l));
-  EXPECT_FP_EQ(0.0l, __llvm_libc::ceill(0.715l));
+  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(0.715l));
   EXPECT_FP_EQ(-0.0l, __llvm_libc::ceill(-0.715l));
-  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.3l));
+  EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.3l));
   EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.3l));
-  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.5l));
+  EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.5l));
   EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.5l));
-  EXPECT_FP_EQ(1.0l, __llvm_libc::ceill(1.75l));
+  EXPECT_FP_EQ(2.0l, __llvm_libc::ceill(1.75l));
   EXPECT_FP_EQ(-1.0l, __llvm_libc::ceill(-1.75l));
-  EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.32l));
+  EXPECT_FP_EQ(11.0l, __llvm_libc::ceill(10.32l));
   EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.32l));
-  EXPECT_FP_EQ(10.0l, __llvm_libc::ceill(10.65l));
+  EXPECT_FP_EQ(11.0l, __llvm_libc::ceill(10.65l));
   EXPECT_FP_EQ(-10.0l, __llvm_libc::ceill(-10.65l));
-  EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.38l));
+  EXPECT_FP_EQ(1235.0l, __llvm_libc::ceill(1234.38l));
   EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.38l));
-  EXPECT_FP_EQ(1234.0l, __llvm_libc::ceill(1234.96l));
+  EXPECT_FP_EQ(1235.0l, __llvm_libc::ceill(1234.96l));
   EXPECT_FP_EQ(-1234.0l, __llvm_libc::ceill(-1234.96l));
 }
 
index 4d64490..482c4de 100644 (file)
@@ -96,8 +96,8 @@ template <> struct __attribute__((packed)) FPBits<long double> {
     // there can be garbage bits in the padding. So, we zero the padding bits
     // in |result|.
     static constexpr UIntType mask =
-        (UIntType(1) << (sizeof(long double) -
-                         Padding<sizeof(uintptr_t)>::value / 8)) -
+        (UIntType(1) << (sizeof(long double) * 8 -
+                         Padding<sizeof(uintptr_t)>::value)) -
         1;
     return result & mask;
   }