Цитата(kovigor @ Dec 21 2013, 23:20)

А что мешает "A" разделить на "C" и полученный результат умножить на "B" ?
Ничего не мешает. Разве только потеря точности. Ведь деление то целочисленное. Или как то можно остаток использовать?
Цитата(kovigor @ Dec 21 2013, 23:20)

И вообще, если вы не делаете достаточно крупную серию, возьмите более подходящий МК и пишите на Си. Есть, конечно, исключения, но в общем случае выбор для проекта такого МК, который подходит "впритык", есть признак дурного тона. А если завтра потребуется простейшая модернизация ПО, что вы станете делать ?
К великому моему сожалению заменить МК нельзя. А места в нем мало от того, что в нем уже есть программа, а я хочу добавить туда свой код. В общем есть задача, описанная в начале. Надо ее решить...
Цитата(Егоров @ Dec 22 2013, 01:53)

Хм.. так 32 разряда - точность. Умножайте спокойно и 32 младших разряда отбрасывайте.
Иначе, при 64-разрядном процессоре Вы тоже встанете в тупик - куда девать результат в 128 разрядов? И так без конца.
На 8-битных процессорах почему-то таких проблем не возникало раньше. Считали с любой требуемой точностью.
Как мы в столбик считаем до 1% или 0.1% ? Младшие разряды отбрасываем, или округляем.
Представьте такую ситуацию в моей программе: A=0x3B8B87C0, B=0x34EDCE00, C=0x2E501440. Если выполнить целочисленную арифметику по моей формуле (с использованием любого количества разрядов), то результат будет: X = 0x440D2D6D. Такой результат должна выдавать моя программа.
Теперь по Вашему совету:
1. A*B = 0x3B8B87C0 * 0x34EDCE00 = 0xC4FA7A9F3FC8000
2. Отбрасываем младшие 32 разряда: 0xC4FA7A9F
3. Выполняем деление: 0xC4FA7A9F / 0x2E501440 = 0х00000004
4. Как я понимаю, возвращаем "утраченные" разряды: 0х40000000
Видно, что 0x440D2D6D и 0х40000000 даже приблизительно не равны. Или я чего не правильно сделал???