normalize.hpp 812 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. // Copyright Benoit Blanchon 2014-2017
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. // If you like this project, please add a star!
  7. #pragma once
  8. namespace ArduinoJson {
  9. namespace Polyfills {
  10. #ifdef ARDUINO
  11. // on embedded platform, favor code size over speed
  12. template <typename T>
  13. short normalize(T& value) {
  14. short powersOf10 = 0;
  15. while (value && value < 1) {
  16. powersOf10--;
  17. value *= 10;
  18. }
  19. while (value > 10) {
  20. powersOf10++;
  21. value /= 10;
  22. }
  23. return powersOf10;
  24. }
  25. #else
  26. // on non-embedded platform, favor speed over code size
  27. template <typename T>
  28. short normalize(T& value) {
  29. if (value == 0.0) return 0;
  30. short powersOf10 = static_cast<short>(floor(log10(value)));
  31. value /= pow(T(10), powersOf10);
  32. return powersOf10;
  33. }
  34. #endif
  35. }
  36. }