[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