Хранение больших значений в маленьких типах данных
- C++
constexprконструктор - Много типов с разным диапазоном и точностью на выбор
Совместима со всеми Arduino платформами (используются Arduino-функции)
Глобально есть два типа: ExpUint8 и ExpUint16, первый хранит в 8 битах, второй в 16. Правая цифра в имени типа отвечает за количество бит экспоненты, чем выше - тем больше максимум, но ниже точность, а также меньше минимальное значение.
| type | min | max | err% |
|---|---|---|---|
ExpUint85 |
8 | > uint32 | 12 |
ExpUint84 |
16 | 1'015'808 | 6 |
ExpUint83 |
32 | 8'064 | 3 |
ExpUint82 |
64 | 1'016 | 1 |
ExpUint169 |
128 | > uint32 | < 1 |
ExpUint168 |
256 | > uint32 | < 1 |
ExpUint167 |
512 | > uint32 | < 1 |
ExpUint166 |
1024 | > uint32 | < 0.1 |
ExpUint165 |
2048 | > uint32 | < 0.1 |
ExpUint164 |
4096 | 268'402'688 | < 0.1 |
ExpUint163 |
8192 | 2'097'024 | < 0.1 |
Версия для знаковых чисел:
| type | min | max |
|---|---|---|
ExpInt85 |
< int32 | > int32 |
ExpInt84 |
-491520 | 491520 |
ExpInt83 |
-3968 | 3968 |
ExpInt82 |
-504 | 504 |
ExpInt169 |
< int32 | > int32 |
ExpInt168 |
< int32 | > int32 |
ExpInt167 |
< int32 | > int32 |
ExpInt166 |
< int32 | > int32 |
ExpInt165 |
< int32 | > int32 |
ExpInt164 |
-134'184'960 | 134'184'960 |
ExpInt163 |
-1'048'448 | 1'048'448 |
Пользоваться можно как обычными числами:
ExpUint84 x = 123456; // запаковка
sizeof(x); // == 1
uint32_t r = x; // распаковка == 122880
uint32_t(x); // так тоже можно- v1.0
- Библиотеку можно найти по названию ExpInt и установить через менеджер библиотек в:
- Arduino IDE
- Arduino IDE v2
- PlatformIO
- Скачать библиотеку .zip архивом для ручной установки:
- Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
- Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
- Распаковать и положить в Документы/Arduino/libraries/
- (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
- Читай более подробную инструкцию по установке библиотек здесь
- Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
- Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код