На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> Деление в языках программирования
   
Какое деление вы считаете более логичным (см. первое сообщение)
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    Цитата D_KEY @
    В сочетании с неявным приведением это работает не очень хорошо.
    Разве? О мультиметодах слышал? :D
      Цитата D_KEY @
      отдельные div и mod

      Если уж по-честноку, то аббревиатура "div" давно и надежно занята дифференциальным оператором "Дивергенция".

      Считаю, что альтернативный оператор деления нужно обозначать так: ÷ (ссылка)

      :rolleyes:
        Цитата D_KEY @
        И разве это не логичный вариант? / - деление чисел с плавающей точкой, а какой-нибудь div делит целочисленно.
        +1, но писать много букв (div вместо косой) не хочется сильно-сильно. :blush:
        Цитата D_KEY @
        Да и в принципе мне кажутся более логичным отдельные div и mod для деления по модулю.
        Эх, а вот я бы оставил '%' за темой целочисленного деления, а вот хочется плавающее - fmod дёргайте.
          Цитата Qraizer @
          Операция / реализована по-разному для разных типов, но смысл её одинаков безотносительно к типам.

          Т.е. целочисленное деление с твоей точки зрения имеет тот же смысл, что и обычное? Интересный взгляд на вещи.
          Цитата Qraizer @
          Сходный с ТС вопрос: надо ли возвращать complex из sqrt() при отрицательном аргументе?

          Тогда непонятно, какой из двух корней возвращать. Да и комплексные числа на практике требуются значительно реже вещественных.
          Цитата Славян @
          +1, но писать много букв (div вместо косой) не хочется сильно-сильно.

          В питоне деление нацело - a // b.
            Цитата OpenGL @
            В питоне деление нацело - a // b.
            Да, когда не было таких комментариев, то счёл бы за вполне 'зер гут' такой вариант!

            Добавлено
            Цитата OpenGL @
            Тогда непонятно, какой из двух корней возвращать.
            Верхний, = так же, как и сейчас при положительных возвращается правый.
              Цитата Славян @
              Да, когда не было таких комментариев, то счёл бы за вполне 'зер гут' такой вариант!

              Я к тому, что можно придумать массу способов записи целочисленного деления, отличных от div.
                Цитата OpenGL @
                Я к тому, что можно придумать массу способов записи целочисленного деления, отличных от div.
                Увы, но сильно сомневаюсь:
                1.Знаковая ASCII схема должна была быть лаконичной, а потому одного иного значка трудно найти.
                2.Знак должен быть как можно понятнее, а школьно-естественный уже задействован.
                3.Набор же букв(знаков) будет или дольше писать, либо разбираться сознанием будет труднее.

                Добавлено
                П.С. впрочем, есть шикарный вариант - ':', но вот и его несколько наспех использовали в тернарной операции ?: :'(
                  Пара знаков вполне приемлема. // в Питоне - ок.
                    Цитата D_KEY @
                    Пара знаков вполне приемлема. // в Питоне - ок.


                    Да и три знака- нормуль, на мой взгляд. Лишь бы понятно было. div и mod- вполне понятно.
                      Цитата OpenGL @
                      Т.е. целочисленное деление с твоей точки зрения имеет тот же смысл, что и обычное?
                      Конечно. Тот факт, что результаты отличаются, является следствием свойств типов. Напомню, деление нацело есть и вещественное, только выполняется оно std::функцией. Это – другая операция. И остаток от деления в виде функции тоже есть. А почему сделали функции? Потому что ведут себя иначе, чем / и %.
                      Сообщение отредактировано: Qraizer -
                        Цитата Qraizer @
                        Цитата OpenGL @
                        Т.е. целочисленное деление с твоей точки зрения имеет тот же смысл, что и обычное?
                        Конечно. Тот факт, что результаты отличаются, является следствием свойств типов.

                        Эм. Но ведь на множестве целых не определена операция деления. Только операция деления с остатком.
                          Цитата Qraizer @
                          Конечно. Тот факт, что результаты отличаются, является следствием свойств типов.

                          Результаты отличаются прежде всего потому, что это разные операции с разной семантикой, хоть и немного похожие.
                          Вообще, складывается впечатление, что для тебя система типов нечто незымблемое, что никак не может быть нелогичным, из-за чего ты при любом удобном случае апеллируешь к ней. Религия какая-то.
                          Цитата Qraizer @
                          А почему сделали функции?

                          Подозреваю, что из-за исторических причин - остаток от деления для вещественных был нужен, % для них не работал, а менять его семантику означало нарушить обратную совместимость.

                          Добавлено
                          Кстати, а в Rust как деление устроено?
                            Цитата OpenGL @
                            Вообще, складывается впечатление, что для тебя система типов нечто незымблемое, что никак не может быть нелогичным, из-за чего ты при любом удобном случае апеллируешь к ней. Религия какая-то.
                            Ну вообще-то так и есть. Только религия тут ни причём. Свойства системы типов являются краеугольным камнем для C. И он далеко не единственный язык с этим свойством, я бы даже сказал, что не знаю языков, где система типов не играла бы такую же по важности роль. Поэтому делать исключений из неё нелогично. Но как я говорил, можно порассуждать о логичности самой системы типов C.
                            Цитата OpenGL @
                            одозреваю, что из-за исторических причин - остаток от деления для вещественных был нужен, % для них не работал, а менять его семантику означало нарушить обратную совместимость.
                            Да, из-за исторических. Но не поэтому. Исторически так сложилось, что ранние компьютеры работали так, как было удобнее их спроектировать. Эти свойства перетекли в правила арифметики языка Фортран, одного из первых и долгое время наиболее популярного ЯВУ. Первые процессоры и микропроцессоры также делались с оглядкой на этот принцип, поэтому язык C перенял Фортрановую арифметику, ибо она отражала реалии правил аппаратно реализованной арифметики в процессорах.
                            Но вот пришёл IEEE на плавающую точку, и с удобностью пришлось завязать в пользу математической корректности. Вот так и получилось, что / и % работают не по математическим правилам, тогда как от вещественной арифметики интуитивно ожидается математически правильное поведение. Отсюда и деление на операторы и функции, выполняющие на первый взгляд одно и то же, но на самом деле по-разному.
                            Сообщение отредактировано: Qraizer -
                              Цитата Qraizer @
                              что ранние компьютеры работали так, как было удобнее их спроектировать.
                              Почему "ранние", они и сейчас так работают. И долго ещё будут так работать.
                              Это реалии не компьютеров и языков программирования, а выполняемых операций.
                              И здесь проявляется различие между чистой математикой и практикой программирования.

                              Для целых чисел в принципе не определена операция точного деления (только в частных случаях). Зато имеется "алгоритм деления" или деление с остатком
                              Для вещественных, как правило, деление осуществляется по возможно как можно более точно, а в тех случаях, когда надо что-то другое, вполне можно обойтись округлением (к ближнему, верхнему, нижнему) и усечением до целого.
                              Поэтому, вполне естественным выбором разработчиков сперва автокодов, а потом ЯВУ назвать обе эти операции просто делением (оговаривая в описании, что для целых это "деление с остатком").

                              С другой стороны в математике деление целых обычно производят в поле рациональных чисел, и ничто не мешает определить операцию деления для целых так, чтобы результат был рациональным или вещественным числом и выполнить "истинное" деление.
                              Кроме того можно доопределить деление с остатком так, чтобы результат такого деления для вещественных и рациональных чисел совпадал с результатом деления целых.
                              Именно это сделали в Питоне.
                                Цитата Qraizer @
                                Ну вообще-то так и есть. Только религия тут ни причём. Свойства системы типов являются краеугольным камнем для C.

                                Но разговор ведь не о Си.

                                Цитата
                                И он далеко не единственный язык с этим свойством

                                Но у других языков другая система типов.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0434 ]   [ 18 queries used ]   [ Generated: 20.04.24, 09:28 GMT ]