Переписать старое значение на новое при определенном пороге.

jenya7
Дата: 15.03.2018 10:53:16
Мне приходят значения. Если новое значение отличается от старого значения на скажем 20% - я переписываю старое значение новым.
void UpdateOnHisteresis( float  *old_val, float  *new_val, uint32_t histeresis)
{
	if ( (*old_val + *old_val*(histeresis/100)) >= *new_val ||
            (*old_val - *old_val*(histeresis/100)) <= *new_val)
         {
		   *old_val = *new_val;
         }
}

Но теперь у меня есть поля не только float но и int и я решил сделать генерик
void UpdateOnHisteresis(void *old_val, void *new_val, uint32_t histeresis)
{
	if ( (*old_val + *old_val*(histeresis/100)) >= *new_val ||
             (*old_val - *old_val*(histeresis/100)) <= *new_val)
         {
		    *old_val = *new_val;
         }
}

но компилятор ругается - expression must be a modifiable lvalue.
Не соображу как правильно сделать кастинг.
mayton
Дата: 15.03.2018 11:06:51
Void нельзя умножать. Нужен кастинг к алгебре

И весь приведённый код скорее не генерик.
jenya7
Дата: 15.03.2018 11:13:09
mayton
Void нельзя умножать. Нужен кастинг к алгебре

И весь приведённый код скорее не генерик.

в этом и вопрос - как сделать кастинг. то что нужен кастинг я как то понял.
mayton
Дата: 15.03.2018 13:55:39
Делай шаблон функции по всем правилам C++.
jenya7
Дата: 15.03.2018 13:59:25
mayton
Делай шаблон функции по всем правилам C++.

у меня не С++. у меня С.
Dima T
Дата: 15.03.2018 14:05:06
jenya7
mayton
Делай шаблон функции по всем правилам C++.

у меня не С++. у меня С.

Тогда делай две функции.

Можно препроцессором попробовать
#define UpdateOnHisteresis ...
Leonid Kudryavtsev
Дата: 15.03.2018 14:06:04
jenya7
и я решил сделать генерик

jenya7
у меня не С++. у меня С.


Что такое "генерик" ?

IMHO В C можно макрос через #define сделать
Basil A. Sidorov
Дата: 15.03.2018 14:13:08
jenya7
Но теперь у меня есть поля не только float но и int и я решил сделать генерик
Если у вас "це без крестов", то делайте (разноимённые) функции на все комбинации типов или закладывайте в вашу структуру индикатор типа, чтобы организовать закат солнца вручную.
jenya7
Дата: 15.03.2018 14:30:29
понял. спасибо.