diff --git a/src/ArduinoJson/Numbers/FloatTraits.hpp b/src/ArduinoJson/Numbers/FloatTraits.hpp index 5736f599..cd7fdf01 100644 --- a/src/ArduinoJson/Numbers/FloatTraits.hpp +++ b/src/ArduinoJson/Numbers/FloatTraits.hpp @@ -31,19 +31,15 @@ struct FloatTraits { template static T make_float(T m, TExponent e) { - if (e > 0) { - for (uint8_t index = 0; e != 0; index++) { - if (e & 1) - m *= positiveBinaryPowersOfTen()[index]; - e >>= 1; - } - } else { + auto powersOfTen = + e > 0 ? positiveBinaryPowersOfTen() : negativeBinaryPowersOfTen(); + if (e <= 0) e = TExponent(-e); - for (uint8_t index = 0; e != 0; index++) { - if (e & 1) - m *= negativeBinaryPowersOfTen()[index]; - e >>= 1; - } + + for (uint8_t index = 0; e != 0; index++) { + if (e & 1) + m *= powersOfTen[index]; + e >>= 1; } return m; } @@ -151,19 +147,15 @@ struct FloatTraits { template static T make_float(T m, TExponent e) { - if (e > 0) { - for (uint8_t index = 0; e != 0; index++) { - if (e & 1) - m *= positiveBinaryPowersOfTen()[index]; - e >>= 1; - } - } else { - e = -e; - for (uint8_t index = 0; e != 0; index++) { - if (e & 1) - m *= negativeBinaryPowersOfTen()[index]; - e >>= 1; - } + auto powersOfTen = + e > 0 ? positiveBinaryPowersOfTen() : negativeBinaryPowersOfTen(); + if (e <= 0) + e = TExponent(-e); + + for (uint8_t index = 0; e != 0; index++) { + if (e & 1) + m *= powersOfTen[index]; + e >>= 1; } return m; }