Skip to content

Commit

Permalink
Cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
bkaradzic committed Nov 23, 2024
1 parent fc6859f commit d588a8f
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 17 deletions.
14 changes: 14 additions & 0 deletions include/bx/inline/math.inl
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,20 @@ namespace bx
return log(_a) * kInvLogNat2;
}

inline BX_CONSTEXPR_FUNC float ldexp(float _a, int32_t _b)
{
const uint32_t ftob = floatToBits(_a);
const uint32_t masked = uint32_and(ftob, kFloatSignMask | kFloatExponentMask);
const uint32_t expsign0 = uint32_sra(masked, kFloatExponentBitShift);
const uint32_t tmp = uint32_iadd(expsign0, _b);
const uint32_t expsign1 = uint32_sll(tmp, kFloatExponentBitShift);
const uint32_t mantissa = uint32_and(ftob, kFloatMantissaMask);
const uint32_t bits = uint32_or(mantissa, expsign1);
const float result = bitsToFloat(bits);

return result;
}

template<>
inline BX_CONSTEXPR_FUNC uint8_t countBits(uint32_t _val)
{
Expand Down
4 changes: 2 additions & 2 deletions include/bx/math.h
Original file line number Diff line number Diff line change
Expand Up @@ -254,9 +254,9 @@ namespace bx
///
BX_CONST_FUNC float pow(float _a, float _b);

/// Returns the result of multiplying _a by 2 raised to the power of the exponent.
/// Returns the result of multiplying _a by 2 raised to the power of the exponent `_a * (2^_b)`.
///
BX_CONST_FUNC float ldexp(float _a, int32_t _b);
BX_CONSTEXPR_FUNC float ldexp(float _a, int32_t _b);

/// Returns decomposed given floating point value _a into a normalized fraction and
/// an integral power of two.
Expand Down
16 changes: 1 addition & 15 deletions src/math.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -130,25 +130,11 @@ namespace bx
return result;
}

BX_CONST_FUNC float ldexp(float _a, int32_t _b)
{
const uint32_t ftob = floatToBits(_a);
const uint32_t masked = uint32_and(ftob, kFloatSignMask | kFloatExponentMask);
const uint32_t expsign0 = uint32_sra(masked, 23);
const uint32_t tmp = uint32_iadd(expsign0, _b);
const uint32_t expsign1 = uint32_sll(tmp, 23);
const uint32_t mantissa = uint32_and(ftob, kFloatMantissaMask);
const uint32_t bits = uint32_or(mantissa, expsign1);
const float result = bitsToFloat(bits);

return result;
}

float frexp(float _a, int32_t* _outExp)
{
const uint32_t ftob = floatToBits(_a);
const uint32_t masked0 = uint32_and(ftob, kFloatExponentMask);
const uint32_t exp0 = uint32_srl(masked0, 23);
const uint32_t exp0 = uint32_srl(masked0, kFloatExponentBitShift);
const uint32_t masked1 = uint32_and(ftob, kFloatSignMask | kFloatMantissaMask);
const uint32_t bits = uint32_or(masked1, UINT32_C(0x3f000000) );
const float result = bitsToFloat(bits);
Expand Down
2 changes: 2 additions & 0 deletions tests/math_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -457,6 +457,8 @@ TEST_CASE("fract", "[math][libm]")

TEST_CASE("ldexp", "[math][libm]")
{
STATIC_REQUIRE(1389.0f == bx::ldexp(86.8125, 4) );

bx::WriterI* writer = bx::getNullOut();
bx::Error err;

Expand Down

0 comments on commit d588a8f

Please sign in to comment.