Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > остаток от деления


Автор: Stesh_ka 31.7.2006, 21:00
Помогите пожалуйста разобраться - как вычислить остаток от деления переменной X на число Y.

как воспользоваться функцией div? 

судя по описанию:
Цитата

div_t div(int numerator,int denominator);
Функция div возращает частное и остаток, полученный в результате операции   numerator/denominator, в структуре div_t.

Структура div_t имеет 2 поля: 
int quot; //Частное 
int rem; // Остаток 


т.е. использовать надо вроде:
div (X,Y)... а как получить rem  этот самый?????? 

Автор: ILAgent 31.7.2006, 21:04
Код

int rem=div(x,y).rem;
int quot=div(x,y).quot;
 

Автор: Daevaorn 31.7.2006, 21:05
Stesh_ka, 
Код

int z = x % y;
 

Автор: EvgenZ 3.8.2006, 17:51
Цитата(Daevaorn @ 31.7.2006,  21:05)
Stesh_ka, 
Код

int z = x % y;

Просто и действенно ))) 



а зачем вообще div?

Автор: Mayk 3.8.2006, 18:35
Цитата(EvgenZ @  3.8.2006,  21:51 Найти цитируемый пост)
а зачем вообще div? 

Для экономии машинного времени? 
В некоторых компьютерах (напр. наших интелах) одной командой на асме можно вычислить и остаток и частное => не надо инструкцию вызывать дважды. 
А в историческом Z80 для примера команды деления вообще нет как таковой и приходится высчитывать чуть ли не столбиком. Опять таки сэкономим время, если вернём сразу и частное и остаток.

Автор: EvgenZ 3.8.2006, 18:47
в ASMe согласен, но в С++ зачем?

Автор: sergejzr 3.8.2006, 19:16
Затем, что

Код

resultat=x/y;
ostatok=x%y;


Займёт вдвое больше времени, чем

Код

div_t d=div(x,y);
resultat=d.quot;
ostatok=d.rem;


 Какая разница, Асм это или Ци? smile


Автор: Daevaorn 3.8.2006, 20:34
Цитата(sergej.z @  3.8.2006,  20:16 Найти цитируемый пост)
Займёт вдвое больше времени, чем

Я бы не торопился с выводамиsmile
MSVS 2005:
Код

;     :    int a = arg1 / arg2;
;     :    int b = arg1 % arg2;

    mov    eax, DWORD PTR _arg1$[esp-4]
    cdq
    idiv    DWORD PTR _arg2$[esp-4]

Ну как? Впечатляет? smile
В div недостаток один - она библиотечная и скорей всего не инлайнится.

Автор: sergejzr 3.8.2006, 20:45
Daevaorn, не впечатляет. Это оптимизация компилятора. 
Попробуй тоже самое с MS VS6.

или
Код

int x=6;
int y=2;
int z=x/y;
if(!x)
x--;

int u=x%y;

Уже проходили это где-то здесь на форуме...



Автор: Daevaorn 4.8.2006, 10:36
Цитата(sergej.z @  3.8.2006,  21:45 Найти цитируемый пост)
 Это оптимизация компилятора. 

И что? Я это и хотел показать.


Цитата(sergej.z @  3.8.2006,  21:45 Найти цитируемый пост)
Попробуй тоже самое с MS VS6.

И что? Может ещё на Turbo C++ попробовать?smile

Цитата(sergej.z @  3.8.2006,  21:45 Найти цитируемый пост)
или

И что?

=)

Автор: sergejzr 9.8.2006, 22:49
Цитата(Daevaorn @  4.8.2006,  08:36 Найти цитируемый пост)

И что?

То, что то, что всё компилятор оптимировать не может. Он конечно львинную долю автоматом делает, но немного понимать как там что и к чему тоже надо..

PS: 
Конечно это хорошо - пользоваться калькулятором, но 2*2 неплохо и в уме уметь решать.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)