[llvm] [APFloat] Add exp functions for single and double using exp/expf implementations from LLVM libc. (PR #190667)

via llvm-commits llvm-commits at lists.llvm.org
Sat Apr 18 16:26:15 PDT 2026


================
@@ -10206,4 +10206,57 @@ TEST(APFloatTest, isValidArbitraryFPFormat) {
   EXPECT_FALSE(APFloat::isValidArbitraryFPFormat("unknown"));
 }
 
+TEST(APFloatTest, expf) {
+  // exp(+-0) = 1.
+  EXPECT_EQ(1.0f, llvm::exp(APFloat(0.0f)).convertToFloat());
+  EXPECT_EQ(1.0f, llvm::exp(APFloat(-0.0f)).convertToFloat());
+  // exp(+Inf) = +Inf.
+  EXPECT_EQ(std::numeric_limits<float>::infinity(),
+            llvm::exp(APFloat::getInf(APFloat::IEEEsingle(), false))
+                .convertToFloat());
+  // exp(-Inf) = 0.
+  EXPECT_EQ(
+      0.0f,
+      llvm::exp(APFloat::getInf(APFloat::IEEEsingle(), true)).convertToFloat());
+  // exp(NaN) = NaN.
+  EXPECT_TRUE(llvm::exp(APFloat::getNaN(APFloat::IEEEsingle())).isNaN());
+  // exp(1)
+  EXPECT_EQ(0x1.5bf0a8p1f, llvm::exp(APFloat(1.0f)).convertToFloat());
+  // exp(float max)
+  EXPECT_EQ(std::numeric_limits<float>::infinity(),
+            llvm::exp(APFloat::getLargest(APFloat::IEEEsingle(), false))
+                .convertToFloat());
+  // exp(min_denormal)
+  EXPECT_EQ(1.0f, llvm::exp(APFloat::getSmallest(APFloat::IEEEsingle(), false))
+                      .convertToFloat());
+  // exp(-1)
+  EXPECT_EQ(0x1.78b564p-2f, llvm::exp(APFloat(-1.0f)).convertToFloat());
+}
----------------
lntue wrote:

Done.

https://github.com/llvm/llvm-project/pull/190667


More information about the llvm-commits mailing list