На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (5) [1] 2 3 ... Последняя » все  ( Перейти к последнему сообщению )  
> Деление в языках программирования
   
Какое деление вы считаете более логичным (см. первое сообщение)
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Навеяно обсуждением в скайпе :) В C-подобных языках программирования (по крайней мере в С, С++, java, C# - как в других - не в курсе) операция a / b, когда a и b целые выполняет целочисленное деление. Меня удивило, что многие считают такое поведение логичным, несмотря на то, что случайно перепутав типы, заюзать целочисленное деление когда нужно обычное в разы проще (и наверняка все не раз на него наступали), чем обычное когда нужно целочисленное. Лично я считаю, что как в питоне или, прости господи, в паскале - всегда обычное, а для целочисленного надо использовать другой оператор - гораздо логичнее. А как думаете вы?
      С одной стороны, удобнее другой оператор (как у того же vb есть "/" и "\"), но, уже привык к явному приведению, сишный вриант тоже не плох. Хуже, когда выполняется полноценное деление, затем приходится округлять результат - лишние операции же :huh:
        Цитата VisualProg @
        С одной стороны, удобнее другой оператор (как у того же vb есть "/" и "\"), но, уже привык к явному приведению, сишный вриант тоже не плох.

        Вот я тоже привык. Причём привык так, что использовал обычное деление по ошибке вместо целочисленного в питоне по-инерции после плюсов. Но когда писал на дельфи (до плюсов) - такой ошибки не делал ни разу. Что также говорит в пользу второго варианта.
          Это вопрос не логичности, а принятой в языке системы типов.
            Цитата Qraizer @
            Это вопрос не логичности, а принятой в языке системы типов.

            Почему? Что принципиально поменяется в плюсовой системе типов с вводом оператора "поделить нацело"?
              Если язык не предназначен для мат.вычислений, пусть типы аргументов определяют тип операции (нефиг юзать магические константы). То бишь как в C
              Если предназначен, то... пусть типы аргументов определяют тип операции :D тоесть, все циферки -- вещественные по-дефолту, но там ещё могут появится комплексные числа, рациональные и ещё куча других. C возможностью зафорсить правильную (желаемую) операцию.
              Сообщение отредактировано: negram -
                Цитата negram @
                Если язык не предназначен для мат.вычислений, пусть типы аргументов определяют тип операции (нефиг юзать магические константы). То бишь как в C

                А причём тут магические константы?
                  Цитата OpenGL @
                  А причём тут магические константы?
                  Ну как... в реальной жизни обычно используются переменные, уже имеющие какой-то тип. И этот самый тип предопределяет операцию. Если написал "1/2" то ну тебя нафиг :)
                    Цитата negram @
                    Если написал "1/2" то ну тебя нафиг

                    А если get_foo() / get_bar()?
                      Цитата OpenGL @
                      А если get_foo() / get_bar()?
                      ну тогда эти самые ф-ции возвращают правильный тип :-?
                      Ну а если например нужно поделить количество резидентной памяти процесса на общее, ну я готов в этом случае добавить приведение типов :)
                        Я за разные операции для целочисленного и "обычного" деления. Соответственно, далее все зависит от системы типов в языке.
                          Цитата negram @
                          Ну а если например нужно поделить количество резидентной памяти процесса на общее, ну я готов в этом случае добавить приведение типов

                          Ну так это понятно. Я тоже готов :) Вопрос же не в этом, а в том, почему приведение типов ты считаешь логичным (и, следовательно, более простым с т.з. программиста), нежели введение отдельной операции?
                            Цитата OpenGL @
                            целочисленное деление.


                            С точки зрения математики эта операция полный бред. Программисты конечно могут позволить себе вольности, но есть же предел.

                            Для операции a/b надо a,b преобразовать как минимум в рациональное число и соответственно результат будет такого же типа. Ну дальше можете из результата получить целое число, если вам погрешность округления не важна.
                              Цитата OpenGL @
                              Вопрос же не в этом, а в том, почему приведение типов ты считаешь логичным (и, следовательно, более простым с т.з. программиста), нежели введение отдельной операции?
                              я считаю правильнее использовать всегда целочисленную арифметику, тк она точна (ну, с поправкой на возможные переполнения) и в большенстве случаев её хватает, а плавточка существует не от хорошей жизни и черевата бОльшим количеством подводных камней. Ну, в довесок раньше она была быстрее (ща не думаю, к тому же это мелочь). А вот вводить отдельную операцию для нецелочисленного деления мне кажется странно :)

                              Соответственно, переходить на вещественные числа следует только, когда это действительно необходимо (вот при мат вычислениях это как-раз практически всегда требуется, поэтому то, что в R по-дефолту именно нецелочисленная арифметика -- это правильно).

                              Добавлено
                              Цитата Pavlovsky @
                              Цитата OpenGL @
                              целочисленное деление.

                              С точки зрения математики эта операция полный бред.
                              да ладно :huh:

                              Добавлено
                              Цитата Pavlovsky @
                              Для операции a/b надо a,b преобразовать как минимум в рациональное число и соответственно результат будет такого же типа. Ну дальше можете из результата получить целое число, если вам погрешность округления не важна.
                              даже если не вспоминать что такое рациональное число... Зачем делать три операции вместо одной, да ещё и гонять данные из одного представления в другое?
                              Сообщение отредактировано: negram -
                                Цитата OpenGL @
                                Почему? Что принципиально поменяется в плюсовой системе типов с вводом оператора "поделить нацело"?
                                Вопрос влияния новой операции на систему типов языка некорректен. В нём попутаны местами причина и следствие. Наоборот, отсутствие такой операции является следствием свойств системы типов в C. Поэтому вопрос следовало бы задать в форме "как нужно изменить систему типов, чтобы такая операция была оправдана".

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


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0433 ]   [ 18 queries used ]   [ Generated: 28.03.24, 12:27 GMT ]