|
|
 |
Ответов
|
Jun 12 2017, 14:50
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(k155la3 @ Jun 12 2017, 19:36)  Загвоздка с typeof(x). IMHO. Возможно это тоже из специфичных макросов. Тем более - в С. ОНО скорее подходит для конвертации в шаблон С++. да. генерик для эмбедед не получиться. а если аргументы uint32_t ? так что ли Код unsigned int Div_Round_Closest(unsigned int x, unsigned int divisor) { if ( (x-1) > 0 || (divisor-1) > 0 || (x > 0)) return (x + (divisor / 2)) / divisor; else return (x - (divisor / 2)) / divisor; }
Сообщение отредактировал Jenya7 - Jun 12 2017, 14:42
|
|
|
|
|
Jun 12 2017, 14:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Jenya7 @ Jun 12 2017, 17:50)  так что ли . . . По-моему, не совсем. Код . . . (((typeof(x))-1) > 0 || // - проверка типа, или его кода ((typeof(divisor))-1) > 0 // - тоже (__x) > 0) Чтобы понять что должно быть - надо откопать кто-есть-ху макрос typeof() или что-оно-там-есть. Если аргументы фиксированного типа - то это все никчему.
|
|
|
|
|
Jun 12 2017, 15:05
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(k155la3 @ Jun 12 2017, 19:58)  По-моему, не совсем. Код . . . (((typeof(x))-1) > 0 || // - проверка типа, или его кода ((typeof(divisor))-1) > 0 // - тоже (__x) > 0) Чтобы понять что должно быть - надо откопать кто-есть-ху макрос typeof() или что-оно-там-есть. Если аргументы фиксированного типа - то это все никчему. я так понимаю в моем случае (unsigned int) все сводиться к return (x + (divisor / 2)) / divisor;
|
|
|
|
|
Jun 13 2017, 08:23
|
Профессионал
    
Группа: Свой
Сообщений: 1 123
Регистрация: 8-03-09
Из: Днепр
Пользователь №: 45 848

|
Цитата(Jenya7 @ Jun 12 2017, 18:05)  я так понимаю в моем случае (unsigned int) все сводиться к return (x + (divisor / 2)) / divisor; Это можно только предположить. Исходя из названия "DIV_ROUND_CLOSEST" макрос как-то относится к делению, округлению (или его подвиду) и и еще чему-то. Как гипотеза: округление для плавающих типов в ту или иную сторону, в зависимости от знака.
|
|
|
|
|
Jun 13 2017, 10:53
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Код unsigned int Div_Round_Closest(unsigned int x, unsigned int divisor) { return (x/(float)divisor + 0.5f); } - это только положительных чисел, а для отрицательных -0,5f надо. Либо так: Код int divRoundClosest(const int n, const int d) { return ((n < 0) ^ (d < 0)) ? ((n - d/2)/d) : ((n + d/2)/d); } Подробности тут: https://stackoverflow.com/questions/2422712...d-of-truncating
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Jun 13 2017, 11:49
|
Профессионал
    
Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075

|
Цитата(demiurg_spb @ Jun 13 2017, 15:53)  Код unsigned int Div_Round_Closest(unsigned int x, unsigned int divisor) { return (x/(float)divisor + 0.5f); } - это только положительных чисел, а для отрицательных -0,5f надо. спасибо. таки надо округлять. только не пойму как divisor сократился? а. понял. весь макрос сводиться к округлению результата.
Сообщение отредактировал Jenya7 - Jun 13 2017, 11:59
|
|
|
|
Сообщений в этой теме
Jenya7 Сделать из дефайна функцию. Jun 12 2017, 14:14       XVR Цитата(k155la3 @ Jun 13 2017, 12:47) Исхо... Jun 13 2017, 10:50       ar__systems Цитата(k155la3 @ Jun 13 2017, 04:47) Исхо... Jun 13 2017, 12:24        k155la3 Цитата(ar__systems @ Jun 13 2017, 15:24) ... Jun 13 2017, 13:53         esaulenka Цитата(k155la3 @ Jun 13 2017, 16:53) Я не... Jun 13 2017, 15:02          k155la3 Цитата(esaulenka @ Jun 13 2017, 18:02) (1... Jun 14 2017, 06:29 x893 1. Посмотрите что генерирует препроцессор и сразу ... Jun 12 2017, 23:28 ViKo Когда такое возможно?
(typeof(x))-1) > 0 Jun 14 2017, 06:49 megajohn Цитата(ViKo @ Jun 14 2017, 09:49) Когда т... Jun 14 2017, 07:09 ViKo То есть, так проверяется, что x беззнакового типа? Jun 14 2017, 07:39 sigmaN На С++ я бы начал с такой реализации. WARNING... Jun 14 2017, 12:03
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|