Разрешены деление, остатки и только действительные числа

Пытаюсь разобраться в этом псевдокоде. Предполагается следующее.... Я могу использовать только целые числа без знака и со знаком (или длинные). Деление возвращает действительное число без остатка. MOD возвращает действительное число. Дроби и десятичные числа не обрабатываются.

INT I = 41828;
INT C = 15;
INT D = 0;

D = (I / 65535) * C;

Как бы вы поступили с дробью (или десятичным числом) в этой ситуации? Есть ли способ использовать отрицательное значение для представления остатка?

В этом примере I/65535 должно быть 0,638, однако с ограничениями я получаю 0 с MOD 638. Как я могу умножить на C, чтобы получить правильный ответ?

Надеюсь, это имеет смысл.

MOD здесь на самом деле вернул бы 23707, а не 638. (Надеюсь, я прав :))


person Senica Gonzalez    schedule 02.04.2010    source источник
comment
Извините, я не понимаю. Что такое МОД?   -  person John    schedule 03.04.2010
comment
MOD возвращает остаток. Итак, скажем, у меня 6/4 DIV вернет 1, а MOD вернет 2. Мне нужно отредактировать мой ответ выше ... 638 не подходит для MOD. :) Только что увидел. en.wikipedia.org/wiki/Modulo_operation   -  person Senica Gonzalez    schedule 03.04.2010


Ответы (2)


Если бы вы изменили порядок операций в этой последней строке, вы бы получили целочисленный ответ, который вы ищете (9, если мои расчеты верны)

D = (I * C) / 65535
/* D == 9 */

Это тот ответ, который вы ищете?

person Community    schedule 02.04.2010
comment
Я думаю, что это могло бы работать для моих целей. Если у кого-нибудь есть ответ о том, как обращаться с десятичными знаками в описанной мной ситуации, я был бы рад его услышать. - person Senica Gonzalez; 03.04.2010
comment
Я опубликовал предлагаемый механизм для обработки десятичных знаков. Хотя это действительно некрасиво. - person Brian; 06.04.2010

Что ж, один из способов обработки десятичных дробей — это функция замены деления. У этой техники есть множество очевидных недостатков.

ALT DIV (dividend, divisor) returns (decimal, point)
for point = 0 to 99
  if dividend mod divisor = 0 return dividend / divisor, point
  dividend = divident * 10
return dividend / divisor, 100
person Brian    schedule 06.04.2010