Reduce size of make_float()

This commit is contained in:
Benoit Blanchon
2023-02-22 14:07:01 +01:00
parent 4e7099dc73
commit 886254c41e

View File

@@ -31,20 +31,16 @@ struct FloatTraits<T, 8 /*64bits*/> {
template <typename TExponent> template <typename TExponent>
static T make_float(T m, TExponent e) { static T make_float(T m, TExponent e) {
if (e > 0) { auto powersOfTen =
for (uint8_t index = 0; e != 0; index++) { e > 0 ? positiveBinaryPowersOfTen() : negativeBinaryPowersOfTen();
if (e & 1) if (e <= 0)
m *= positiveBinaryPowersOfTen()[index];
e >>= 1;
}
} else {
e = TExponent(-e); e = TExponent(-e);
for (uint8_t index = 0; e != 0; index++) { for (uint8_t index = 0; e != 0; index++) {
if (e & 1) if (e & 1)
m *= negativeBinaryPowersOfTen()[index]; m *= powersOfTen[index];
e >>= 1; e >>= 1;
} }
}
return m; return m;
} }
@@ -151,20 +147,16 @@ struct FloatTraits<T, 4 /*32bits*/> {
template <typename TExponent> template <typename TExponent>
static T make_float(T m, TExponent e) { static T make_float(T m, TExponent e) {
if (e > 0) { auto powersOfTen =
e > 0 ? positiveBinaryPowersOfTen() : negativeBinaryPowersOfTen();
if (e <= 0)
e = TExponent(-e);
for (uint8_t index = 0; e != 0; index++) { for (uint8_t index = 0; e != 0; index++) {
if (e & 1) if (e & 1)
m *= positiveBinaryPowersOfTen()[index]; m *= powersOfTen[index];
e >>= 1; e >>= 1;
} }
} else {
e = -e;
for (uint8_t index = 0; e != 0; index++) {
if (e & 1)
m *= negativeBinaryPowersOfTen()[index];
e >>= 1;
}
}
return m; return m;
} }