Size: a a a

2020 December 20

A

Alexander in Embedded Group
Faberge
Переехал в Китай?
Вроде пока в Прибалтику.
А так не знаю )
Не общался лет 5.
источник

Cyberslav Круассан... in Embedded Group
Пс
источник

A

A in Embedded Group
есть кто нибудь в группе кто пользуется red pitaya?
источник

D

Dr Zlo in Embedded Group
Ponytale 🇷🇺
гайз, такой вопрос по сям: хочется написать максимально переносимое. у меня есть следующая штука:

unsigned int x,y;
...
if(x < y) x = UINT_MAX - y + 1;

идея этого кода - простой заем из старшего разряда, который в данном случае хранится в другой целой переменной. Но могу ли я так написать, или нужно явно:

if(x < y) {x = UINT_MAX - y; x++;
}

? Сомнение в том, что в первом случае компилятор возможно захочет сделать сначала UINT_MAX + 1, а потом из этого вычесть y, что приведет к выходу за разрядную сетку. Или такое поведение компилера стандартом оговорено как недопустимое?
Выход за разрядную сетку в твоём случае не приведёт к некорректным значениям.
источник

P

Ponytale 🇷🇺 in Embedded Group
Dr Zlo
Выход за разрядную сетку в твоём случае не приведёт к некорректным значениям.
он недопустим. unsigned int - как пример типа был. на самом деле там юзается максимальный, заранее неизвестный целый тип
источник

D

Dr Zlo in Embedded Group
Ponytale 🇷🇺
он недопустим. unsigned int - как пример типа был. на самом деле там юзается максимальный, заранее неизвестный целый тип
приведи ещё подобный пример
источник

D

Dr Zlo in Embedded Group
я не вижу пока некорректности
источник

P

Ponytale 🇷🇺 in Embedded Group
мне просто нужно, чтобы сишник генерил код, никогда не вылазящий за пределы естественной разрядности АЛУ
источник

P

Ponytale 🇷🇺 in Embedded Group
то, что он может расширить тип до long int и тп в промежуточных вычислениях мне совершенно не нужно
источник

P

Ponytale 🇷🇺 in Embedded Group
на самом деле из соседней конфы подсказали:
источник

P

Ponytale 🇷🇺 in Embedded Group
Переслано от NElprg NElprg
Так вроде если вы хотите приоритетности выполнения, то этого можно добиться скобками ?!
if(x < y) x = (UINT_MAX - y) + 1;
источник

P

Ponytale 🇷🇺 in Embedded Group
Переслано от Ponytale 🇷🇺
компилер не раскроет скобки на свое усмотрение при оптимизации? приоритеты операций ведь одинаковые без скобок если
источник

P

Ponytale 🇷🇺 in Embedded Group
Переслано от NElprg NElprg
Нет конечно,При условии , что он как то сообветсвтует конечно стандарту :)) )
источник

D

Dr Zlo in Embedded Group
Ponytale 🇷🇺
мне просто нужно, чтобы сишник генерил код, никогда не вылазящий за пределы естественной разрядности АЛУ
с точки зрения результата ваш код кстати не отличается от
x = 0 - y;
источник

P

Ponytale 🇷🇺 in Embedded Group
Dr Zlo
с точки зрения результата ваш код кстати не отличается от
x = 0 - y;
кстати да, спасибо за это наблюдение.

но у меня все еще хуже :). также как unsigned int было лишь примером, так и UINT_MAX - тоже лишь для того, чтобы не засорять вопрос... на самом деле я делаю вычисления в произвольной разрядности, задаваемой маской, аналогичной UINT_MAX, но содержащей другое (не соответствующее стандартным типам си) кол-во бит. мне нужно, чтобы все вычисления не выходили за пределы именно этой разрядности😁😜😝
источник

P

Ponytale 🇷🇺 in Embedded Group
...
нужно проводить деления на степень двойки, заданную при компиляции (с сохранением остатка):

#ifndef uint_t
typedef unsigned int uint_t;
#endif

#define K 4
#define K_MASK ( ((uint_t)1 << (K)) - 1 )

далее юзаются две переменных:
uint_t val, val_mod;

ну и где-то дальше:

val = x>>K;
val_mod = x&K_MASK;

ну и где-то дальше вычитаем из остатка от деления бОльший остаток:
if (val_mod < y)        /* нужен заем */
{
 val--;            
 val_mod += K_MASK - y; val_mod[n]++; /* val_mod = 2^K - (y - val_mod) */
}

если кому-то интересно это разобрать...
источник

P

Ponytale 🇷🇺 in Embedded Group
Dr Zlo
с точки зрения результата ваш код кстати не отличается от
x = 0 - y;
да, я ошибся вообще в первом вопросе. вместо "+=" поставил "=". мхех
источник

P

Ponytale 🇷🇺 in Embedded Group
на самом деле буду благодарен если кто порекомендует что-то более разумное/эффективное для подобной работы с делением в целых числах без потери точности
источник

F

Faberge in Embedded Group
A
есть кто нибудь в группе кто пользуется red pitaya?
Давно не слышал, чтобы о ней кто-нибудь вспоминал
источник

F

Faberge in Embedded Group
А в связи с чем вопрос?
источник