0

Абсолютно не понимаю оператор "деление по модулю", он же "остаток от деления", он же "%"

Например опробовал c#: int a = 1; int b = 2; double c = a/b; //ответ 0 - почему не 0,5? double d = a%b; //ответ 1 - откуда берётся единица, а не 5... Остаток же. Едем дальше: double x = 0.5; int y = 2; double z = a/b; //ответ 0,25 - удивительно правильно. double i = a%b; //ответ 0,5 - опять почему 0,5? Этот оператор какой то не остаток от деления, а "удивительный фокусник", за гранью моего понимания. И стараюсь этим оператором вообще не пользоваться.

13th Oct 2017, 7:08 AM
дымка
дымка - avatar
10 Réponses
+ 6
You are mixing datatypes in your examples Try with the same datatypes or try casting to another type and see what results you get
13th Oct 2017, 7:15 AM
jay
jay - avatar
+ 4
Вы смешиваете типы данных в своих примерах Попробуйте использовать те же типы данных или попробуйте выполнить кастинг на другой тип и посмотрите, какие результаты вы получите
13th Oct 2017, 7:16 AM
jay
jay - avatar
+ 4
This is how to do it in c++ https://code.sololearn.com/cz7bUsm82X5m/?ref=app I don't know c# well enough to answer for that.
13th Oct 2017, 7:32 AM
jay
jay - avatar
+ 4
Вот как это сделать в c ++ https://code.sololearn.com/cz7bUsm82X5m/?ref=app Я не знаю c # достаточно, чтобы ответить за это.
13th Oct 2017, 7:34 AM
jay
jay - avatar
+ 1
Обычно я просто часами подбираю сложные формулы что бы добиться того чего мне нужно.
13th Oct 2017, 7:26 AM
дымка
дымка - avatar
+ 1
Хорошо... значит всё как всегда дело в погрешностях... Или как это называется.
13th Oct 2017, 7:40 AM
дымка
дымка - avatar
0
Эм, тут даже нет функции "ответить". Насчёт смешения - а как тогда иначе, на одних целочисленных? тогда зачем нужны такие точные инициализации типов данных... Кстати на js тоже немыслимые результаты получаются с этим оператором, а там тип данных не объявляется явно.
13th Oct 2017, 7:24 AM
дымка
дымка - avatar
0
Честно говоря надоедает часами сидишь в экран и не понимаешь "что хочешь сделать" и "что делаешь", а потом просто забрасываешь и потом только через полгода возвращаешься к старым задумкам. Кажется опять "коддинг" отпускает... То ли я такой тупой, но ни мотивации, ни нормальной практики нет.
13th Oct 2017, 7:49 AM
дымка
дымка - avatar
0
Как я понимаю, первом примере у тебя сперва получается целочисленный результат, который затем переводится в double, из за чего теряется точность, поэтому a/b получается 0 а не 0.5. По поводу % - если делимое меньше делителя, то делимое и будет результатом %
13th Oct 2017, 12:25 PM
nuprivet
nuprivet - avatar