[an error occurred while processing this directive]
Ответ: ну, мысли такие:
(«Телесистемы»: Конференция 'Микроконтроллеры и их применение')
миниатюрный аудио-видеорекордер mAVR

Отправлено diwil 22 июля 2002 г. 15:26
В ответ на: Msp430f149 и целочисленная математика отправлено Minas Stanislav 22 июля 2002 г. 14:13

1. Эти операции сильно компилеро-зависимы (если, конечно же, думать об эффективности кода) => пиши на ассемблере.
2. Большинство их них очевидны: например ClearX(unsigned int* dst, int size) есть не что иное, как memset(dst, 0, size)
3. Операции умножения тоже просты - умножай в столбик или как полиномы.
4. Операция деления делается так:

/* returns a/b or a%b, see comments. */
__XX
__udivmodXI3 ( __XX a, __XX b)
{
__XX al = a; // quotant
__XX ah = 0; // reminder
__XX tmpf;
int i;

for (i = sizeof(__XX)*8; i > 0; i--)
{
ah = (ah << 1) | (al >> (sizeof(__XX)*8-1) );
tmpf = (ah >= b) ? 1 : 0;
ah -= ((tmpf) ? b : 0);
al = (al << 1) | tmpf;
}

return al; // for __udivXi3 = a/b
return ah; // for __umodXi3 = a%b
}

ну и
4. Все целочисленые операции выполняются с очень высокой точностью :)
5. GNUтый компилер имеет тип long long - 8байт
6. Если нужен больший размер чисел то либо что-то напутано с идеей, либо надо портировать libgmp, но у msp430xXXX может не хватить памяти.

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru