BLI: add safe_powf function
The same function is also used by cycles.
This commit is contained in:
parent
4a9d903e2b
commit
35bfe1702c
|
@ -103,6 +103,7 @@ MINLINE float pow2f(float x);
|
|||
MINLINE float pow3f(float x);
|
||||
MINLINE float pow4f(float x);
|
||||
MINLINE float pow7f(float x);
|
||||
MINLINE float safe_powf(float base, float exponent);
|
||||
|
||||
MINLINE float sqrt3f(float f);
|
||||
MINLINE double sqrt3d(double d);
|
||||
|
|
|
@ -70,6 +70,13 @@ MINLINE float pow7f(float x)
|
|||
{
|
||||
return pow2f(pow3f(x)) * x;
|
||||
}
|
||||
MINLINE float safe_powf(float base, float exponent)
|
||||
{
|
||||
if (UNLIKELY(base < 0.0f && exponent != (int)exponent)) {
|
||||
return 0.0f;
|
||||
}
|
||||
return powf(base, exponent);
|
||||
}
|
||||
|
||||
MINLINE float sqrt3f(float f)
|
||||
{
|
||||
|
|
|
@ -113,3 +113,15 @@ TEST(math_base, Log2CeilU)
|
|||
EXPECT_EQ(log2_ceil_u(9), 4);
|
||||
EXPECT_EQ(log2_ceil_u(123456), 17);
|
||||
}
|
||||
|
||||
TEST(math_base, SafePowf)
|
||||
{
|
||||
EXPECT_FLOAT_EQ(safe_powf(4.0f, 3.0f), 64.0f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(3.2f, 5.6f), 674.2793796f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(4.0f, -2.0f), 0.0625f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(6.0f, -3.2f), 0.003235311f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(-4.0f, 6), 4096.0f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(-3.0f, 5.5), 0.0f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(-2.5f, -4.0f), 0.0256f);
|
||||
EXPECT_FLOAT_EQ(safe_powf(-3.7f, -4.5f), 0.0f);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue