From 3ee93983739c7676e7161ac3610583fc03e972b3 Mon Sep 17 00:00:00 2001 From: Thomas Sarlandie <thomas@sarlandie.net> Date: Mon, 3 Jul 2017 09:27:24 -0700 Subject: [PATCH] Fix #544: force large constants to double type This helps when the compiler option `-fsingle-precision-constant` is set (teensy 3.x). --- src/ArduinoJson/Polyfills/normalize.hpp | 24 +++++++++++----------- src/ArduinoJson/TypeTraits/FloatTraits.hpp | 8 ++++---- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/ArduinoJson/Polyfills/normalize.hpp b/src/ArduinoJson/Polyfills/normalize.hpp index 5004b766..c994e2f0 100644 --- a/src/ArduinoJson/Polyfills/normalize.hpp +++ b/src/ArduinoJson/Polyfills/normalize.hpp @@ -17,16 +17,16 @@ int16_t normalize(T& value) { if (value >= ARDUINOJSON_POSITIVE_EXPONENTIATION_THRESHOLD) { #if ARDUINOJSON_DOUBLE_IS_64BITS - if (value >= 1e256) { - value /= 1e256; + if (value >= 1e256L) { + value /= 1e256L; powersOf10 = int16_t(powersOf10 + 256); } - if (value >= 1e128) { - value /= 1e128; + if (value >= 1e128L) { + value /= 1e128L; powersOf10 = int16_t(powersOf10 + 128); } - if (value >= 1e64) { - value /= 1e64; + if (value >= 1e64L) { + value /= 1e64L; powersOf10 = int16_t(powersOf10 + 64); } #endif @@ -58,16 +58,16 @@ int16_t normalize(T& value) { if (value > 0 && value <= ARDUINOJSON_NEGATIVE_EXPONENTIATION_THRESHOLD) { #if ARDUINOJSON_DOUBLE_IS_64BITS - if (value < 1e-255) { - value *= 1e256; + if (value < 1e-255L) { + value *= 1e256L; powersOf10 = int16_t(powersOf10 - 256); } - if (value < 1e-127) { - value *= 1e128; + if (value < 1e-127L) { + value *= 1e128L; powersOf10 = int16_t(powersOf10 - 128); } - if (value < 1e-63) { - value *= 1e64; + if (value < 1e-63L) { + value *= 1e64L; powersOf10 = int16_t(powersOf10 - 64); } #endif diff --git a/src/ArduinoJson/TypeTraits/FloatTraits.hpp b/src/ArduinoJson/TypeTraits/FloatTraits.hpp index 28fa261f..0af1f57a 100644 --- a/src/ArduinoJson/TypeTraits/FloatTraits.hpp +++ b/src/ArduinoJson/TypeTraits/FloatTraits.hpp @@ -34,13 +34,13 @@ struct FloatTraits<T, 8 /*64bits*/> { if (e >= 0) return m * (e & 1 ? 1e1 : 1) * (e & 2 ? 1e2 : 1) * (e & 4 ? 1e4 : 1) * (e & 8 ? 1e8 : 1) * (e & 16 ? 1e16 : 1) * (e & 32 ? 1e32 : 1) * - (e & 64 ? 1e64 : 1) * (e & 128 ? 1e128 : 1) * - (e & 256 ? 1e256 : 1); + (e & 64 ? 1e64L : 1) * (e & 128 ? 1e128L : 1) * + (e & 256 ? 1e256L : 1); e = TExponent(-e); return m * (e & 1 ? 1e-1 : 1) * (e & 2 ? 1e-2 : 1) * (e & 4 ? 1e-4 : 1) * (e & 8 ? 1e-8 : 1) * (e & 16 ? 1e-16 : 1) * (e & 32 ? 1e-32 : 1) * - (e & 64 ? 1e-64 : 1) * (e & 128 ? 1e-128 : 1) * - (e & 256 ? 1e-256 : 1); + (e & 64 ? 1e-64L : 1) * (e & 128 ? 1e-128L : 1) * + (e & 256 ? 1e-256L : 1); } static T nan() { -- GitLab