Кто любит RISC в жизни, заходим, не стесняемся.
Ответить

stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 17:16:19

У меня возник вопрос .Есть вещественное число.Как мне организовать правильно увеличения инкремента.Как выбрать шаг?.И каким образом его сохранить в EEPROM.И в flash памяти?

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 17:25:06

Формат float занимает 4 байта под число одинарной точности. Формат double - 8 байт под число двойной точности. Вот с таким шагом их и хранить.

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 18:00:08

каким образом его сохранить в EEPROM.И в flash памяти?

Есть смутное подозрение, что ваша затея хранить флоат ничем не обоснована. Флоат - это не просто дробное число. Просто дробные числа можно хранить в целочисленном формате.

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 18:19:48

А я вообще не понял вопроса, у меня он как: "выбрать шаг инкремента для float"... это, как минимум, странно.

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 19:29:10

Есть смутное подозрение, что ваша затея хранить флоат ничем не обоснована. Флоат - это не просто дробное число. Просто дробные числа можно хранить в целочисленном формате.
Боюсь от Вашей фразы ТС вообще в exception выпадет. :)))

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 22:17:20

Вероятно имеется ввиду инкремент указателя на float применительно к тому, сколько места выделить в еепромке под переменную float.

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 22:25:14

По предыдущим сообщениям.float десятые от целого числа.А double сотые или я ошибаюсь.Значит инкремент 0.1 минимум для float а для double 0.01?А ка же сохранить это число в памяти EEPROM?

Re: stm32 настройка и сохранение вещественных чисел float.

Сб июн 04, 2022 22:33:15

По предыдущим сообщениям.float десятые от целого числа.

Шозабред? :facepalm:
Флоат - это ПЛАВАЮЩАЯ запятая. Флоат перекрывает диапазон от 1,2*10^−38 до 3,4*10^+38. Флоат имеет нелинейное разрешение и никакой "инкремент" к нему не применим по определению.
Тоже самое и с даблом. Только у него диапазон чисел другой.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 04:36:03

Ну хорошо инкремент не применим.Ну а как сохранить данные числа ?

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 05:55:02

Сохранять как обычные 32-х (для флоат) или 64-х (для дабл) разрядные числа. Только у меня остался вопрос. А зачем вам вообще потребовался флоат или дабл? Что такого вы делаете, что без них никак? Да еще и сохранять их нужно....

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 05:56:46

Код:
void WriteEEPROM(unsigned ee_adr, uint8_t *src, unsigned len);

int main()
{
  float x;
  WriteEEPROM(0,&x,sizeof(x)); 
}
Собственно, вместо float может быть вообще что угодно.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 07:12:31

Я правда функциями не пользуюсь.Функция -удобна.Но у меня не пошла.И как это инкремента для вещественного floatне может быть? а настройка кондиционеров ?

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 07:15:29

ivan dimir писал(а):float десятые от целого числа.А double сотые или я ошибаюсь.Значит инкремент 0.1 минимум для float а для double 0.01
Это неверно.
Код:
1/8бит = 0,00390625
1/16бит = 0,0000152587890625
1/32бит = 0,00000000023283064365386962890625
float - ?
Если мантисса имеет разрядность 23бит, то 1/23бит = 0,000000119209303761638 по идеи это и есть минимум для float.

Вы с успехом можете инкрементировать хоть на 0,0000125.

Но проблема заключается в другом.
А как уже написали
КРАМ писал(а):Флоат имеет нелинейное разрешение и никакой "инкремент" к нему не применим по определению.
ivan dimir, попробуйте инкрементировать на 0,0125 и через несколько инкрементов у вас вылезет ошибка. Которая с последующими инкрементами будет только накапливаться, что в конечном итоге приведет к неверному результату.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 09:06:28

дело не в ошибке.
у понятий инкремент и плав.точка абсолютно разный базис.
Вы же нигде не встречали рулетку не на металлической полосе, а на резиновой ленте.
разные свойства - разное применение.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:06:09

А почему бы тогда не сделать в целых числах, а запятую ставить вручную. Тоесть напимер 25,3° будет записываться целым числом 253 и его можно инкрементировать по 1 для 0,1° или по 10 для 1°. То есть нецелое число с десятыми или сотыми долями просто домножается на 10 или 100 и таким образом десятичная запятая уходит и не нужен никакой float - достаточно int16_t или int32t. Все расчеты будут в целочисленной математике, а при выводе на дисплей десятичную запятую можно поставить вручную, разделив число на две части - до и после запятой.
Автору нужно разобраться с темой представления чисел.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:13:27

А почему бы тогда не сделать в целых числах, а запятую ставить вручную.

Вы только что изобрели fix point... :))) :))) :)))
Только для этого не надо переходить на двоично-десятичное представление чисел. Хватит и просто двоичного. Так диапазон чисел будет заметно шире, а множитель станет степенью двойки, что заменит умножение/деление на арифметические сдвиги.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:18:06

Я просто не стал называть это слишком сложным словом и объяснил "на пальцах" как попроще :))) И я не говорил про BCD, я имел ввиду записать не float t = 25.3, а int16_t t = 253. А при выводе этого числа на дисплей вывести его как оно есть, а точку поставить вручную между разрядами.

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:20:49

Как это вывод вручную.Ну число 253*1/10 я так понимаю?А потм вывод присвоить float(duoble)переменной это число и вывод этого числа на экран?

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:23:48

а настройка кондиционеров ?

Вы путаете вывод на индикацию с математикой регулирования. Регулирование не требует никаких дробей, если конечно диапазон требуемых чисел не выходит за целочисленную разрядность. Но и тогда флоат употребляется при расчетах очень ограничено (например как тип у коэффициентов рекурсивных фильтров - IIR). При выводе не дисплей чисел с фиксированной десятичной разрядностью, место запятой определяется отдельно от целого числа.
Ну и нет никакой необходимости хранить в EEPROM запятые. Достаточно хранить приведенное к целому число (то есть сдвинутое до целого).

Re: stm32 настройка и сохранение вещественных чисел float.

Вс июн 05, 2022 10:25:37

В зависимости от того, какую функцию вы используете для вывода текста на дисплей и от того, какой дисплей применяете. Если обычный семисегментный 3-разрядный, то отобразите на нем число "253" и включите точку во втором разряде индикатора, чтобы получилось на дисплее "25.3"
Ответить