На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: ANDLL, ALXR
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> Деление отрицательных чисел , на процессорах семейства x86
   
Какое деление отрицательных чисел для Вас было бы удобнее ?
Гости не могут просматривать результаты голосования.
Гости не могут голосовать 
    С математически правильной точки зрения, если разделить (-5) на 3, получится в остатке +1. А теперь попробуйте вычислить это на компьютере. Получится -2. Это имеет историческую причину: разрабатывая процессор x86, инженеры Intel реализовали именно такой, "неправильный" способ деления. Может быть, они плохо знали математику ? :) Или решили сэкономить несколько десятков транзисторов, сведя случай отрицательных чисел к положительным ?
    В таком виде деление целых чисел перекочевало в большинство языков программирования. И, наверное, для совместимости, будет тянуться и дальше.
    А удобно ли оно ? Лично мне ни разу не встретилась ситуация, когда требовалась бы именно такая интерпретация деления отрицательных чисел. Конечно, ситуация исправляется написанием своей процедуры деления, возвращающей всегда неотрицательный остаток. Так и делаю.
    Опишите случаи, когда Intel-овское деление оказалось для Вас удобным. И ответьте на вопрос, каким оно было бы, если бы Вы разрабатывали процессор.
      Я вобще не стыкался с делением на асме, хоть програмирую на ньом, и не хочу
      стыкатся. :wall:
        если делить математически, то получим вот что:
        5 / 2 = 2
        -5 / -2 = 3
        хотя -5/-2 = 5/2
        в топку такое деление =)
          Думаю, что понятие математической правильности здесь очень условно..

          Все-таки, более естественно, когда частное от деления -5 на 3 равно -1, а не -2.
          И еще естественно, когда
          n == m*(n/m) + (n%m)
          - а иное чревато ошибками.
            n == m*(n/m) + (n%m)
            эта формула будет верна для любого вида деления =)
              Цитата DEiL @ 27.06.04, 20:10
              если делить математически, то получим вот что:
              5 / 2 = 2
              -5 / -2 = 3
              хотя -5/-2 = 5/2

              Если мне не изменяет память, операция целочисленного деления вообще не определена для отрицательного знаменателя. В случае (-5)/(-2), скорее всего, уместнее перевести это дело в вещественные числа - там хотя бы будет какой-то смысл от такой операции. Если числа делятся нацело, то результат очевиден. А если нет - спорный момент, как нужно считать. И зачем считать, где вообще (при решении какой задачи) такое деление будет осмысленным ?

              Добавлено в :
              Цитата NU_2000 @ 27.06.04, 19:47
              Я вобще не стыкался с делением на асме

              Целочисленное деление в Си или Паскале ничем не отличается от деления на ассемблере, поскольку компилятор просто подставляет инструкцию idiv
              Деление двух знаковых 32-битных переменных даст тот же результат.
                Цитата
                Целочисленное деление в Си или Паскале ничем не отличается от деления на ассемблере, поскольку компилятор просто подставляет инструкцию idiv
                На Visual C++ я только что попробывал, у меня все нормально делиться
                  Я так подозреваю, что то, что Вы назвали математическим делением - это какая то самодеятельность.

                  Цитата

                  (-5) на 3, получится в остатке +1.


                  ??? это с чего это?
                    Цитата
                    С математически правильной точки зрения, если разделить (-5) на 3, получится в остатке +1. А теперь попробуйте вычислить это на компьютере. Получится -2.

                    (-1)*3 +(-2) = -5, так что в интел правильные математики сидят:)
                      Чёткое математическое определение целочисленного деления можно найти в любом учебнике по введению в теорию чисел, первая глава - арифметика модульных остатков.
                      Но на самом деле главное - не соответствие какому-то учебнику, а удобство в использовании. Приведите хоть один пример, когда отрицательный остаток полезен. Реальную задачу, плз.
                        Цитата
                        CD_Eater, 28.06.04, 17:09
                        Приведите хоть один пример, когда отрицательный остаток полезен.

                        В бухгалтерии это называеться "красное сальдо" cо всеми вытекающими последствиями.
                          Цитата
                          DEiL, 27.06.04, 22:10
                          если делить математически, то получим вот что:
                          5 / 2 = 2
                          -5 / -2 = 3
                          хотя -5/-2 = 5/2
                          в топку такое деление =)
                          Не надо... не надо :)
                          -5 / -2 = 2 (остаток -1) :)

                          Цитата
                          CD_Eater, 28.06.04, 19:09
                          Приведите хоть один пример, когда отрицательный остаток полезен.
                          См. мессагу potor
                            Цитата

                            ..а удобство в использовании


                            очень удобно заранее знать, что же имеют в виду под понятием "остаток от деления" всё остальное человечество.
                              Действительно, математически остаток - число положительное.
                              -5 / -2 = 3, остаток 1

                              http://sbiryukova.narod.ru/Arifm/Delim/Delim_ost_5.htm
                              http://www.3ka.mipt.ru/vlib/books/Mathemat...erTheory/1.html
                              http://katpop.narod.ru/vmsch/7klass/2_2.htm
                              http://www.91.ru/education/matan/Listok04-1.htm
                              Сообщение отредактировано: trainer -
                                Цитата
                                -5 / -2 = неполное частное -3, остаток 1

                                ну в данном случае частное будет 2, а отаток 1
                                я думаю ты имел ввиду
                                -5/2 тогда так как ты и говоришь, но меня лично не устроило бы такое частное
                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0345 ]   [ 16 queries used ]   [ Generated: 16.06.25, 19:04 GMT ]