mirror of
https://github.com/bkaradzic/bx.git
synced 2026-02-17 12:42:34 +01:00
Cleanup.
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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.
|
||||
|
||||
16
src/math.cpp
16
src/math.cpp
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user