На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
Модераторы: Qraizer
  
> = В МАТЕМАТИКЕ И == В ПРОГРАММИРОВАНИИ
    Разъясните, пожалуйста!

    1) формула в математике (Х = Х) - это тоже, что формула в программировании (Х == Х)?

    2) формула в математике (Х ≠ Х) - это тоже, что формула в программировании (Х != Х)?

    Спасибо!
      А что тут говорить, в математике классическая запись:

      X = 0

      может говорить о совершенно разных вещах.

      1. Присвоение иксу нуля (пример: X = 0)
      2. Сравнение икса с нулём (пример: Y = f(X), при X=0)

      В программировании, эти операции могут быть записаны разными операторами:

      Присвоение (наиболее распространённые операторы):
      • =
      • :=

      Сравнение (наиболее распространённые операторы):
      • =
      • ==
      • ===

      Да, где то это одинаковые операторы (VB/QB/DB/DBP/... и т.д.):

      ExpandedWrap disabled
        dim i as integer
        i = 0
        if i = 0 then
         ' ...
        endif


      Где то разные (BD/TP/C/C++/C#/java/... и т.д.):

      ExpandedWrap disabled
        var i : integer;
        i := 0;
        if i = 0 then begin
         // ...
        end;


      ExpandedWrap disabled
        int i = 0;
        if(i==0){
         //...
        }



      Нельзя ответить на ваш вопрос однозначно. Хотя, для языка C++ то что вы описали, похоже на действительность, разве что, надо обговорить что за математический контекст у операции "X = 0".

      Добавлено
      Не уверен, но, имхо, в плюсах такая конструкция не несёт смысла:
      Цитата ch19 @
      Х = Х
      Х == Х
      Х != Х

      По простой причине, оптимизатор должен такое вообще вырезать. То есть, любой пример с такой конструкцией не будет выполнять эту инструкцию. Но, это уже придирки.
      Сообщение отредактировано: VisualProg -
        Цитата VisualProg @
        Нельзя ответить на ваш вопрос однозначно. Хотя, для языка C++ то что вы описали, похоже на действительность, разве что, надо обговорить что за математический контекст у операции "X = 0".


        Спасибо! Я так понимаю, что если вместо Х подставить ноль, то
        (0=0) в математике - это тоже, что (0==0) в программировании. Просто потому, что как о (0=0) можно сказать истинно, так и о (0==0), что оно истинно. В программировании явно возвращается истина, в математике же это просто оговаривается (закон тождества - истинен при любых подстановках значений вместо Х)

        Или что-то ускользает от моего понимания?
          Вы не ответили, какой контекст математической операции. Без него я не смогу ответить какой его аналог в программировании.
            Цитата VisualProg @
            Вы не ответили, какой контекст математической операции. Без него я не смогу ответить какой его аналог в программировании.

            Я имел ввиду закон тождества: что такая запись X=X всегда верна независимо от значения Х. Просто в программировании это всегда возвращаемое значение true, в математике же это (неявно) оговаривается. По сути, такая запись (Х=Х) нужна, чтобы показать, что она всегда истинна, раз мы не интересуемся конкретными значениями.
              Цитата ch19 @
              Просто в программировании это всегда возвращаемое значение true


              В программировании, инструкция:

              ExpandedWrap disabled
                int x;
                x = x;


              Не выполняется. Она убирается на стадии оптимизации. (весь этот код уберётся)
              Смотреть ASM результат

              Инструкции:

              ExpandedWrap disabled
                int x = 0;
                 
                if(x == x) {
                 return 0;
                }

              Смотреть ASM результат (в данном случае, компилятор с не полной оптимизацией, но, её можно усилить, и избавиться от int x = 0;)

              Так же оптимизируются до:

              ExpandedWrap disabled
                int x = 0;
                return 0;


              Опять же, инструкции:

              ExpandedWrap disabled
                int x = 0;
                if(x != x){
                 return 1;
                }
                return 0;


              Сократиться, и блок условия с телом удалится.
              Смотреть ASM результат

              Получаем код:

              ExpandedWrap disabled
                int x = 0;
                return 0;


              Компилятор уже знает что эти выражения можно сократить. Никаких true/false не будет высчитываться, потому что заранее можно эту операцию отбросить.

              Добавлено
              Более того, кроме явных тождеств:

              X = X

              компилятор может поступать ещё более интеллектуально, и вычислять такие тождества:

              ExpandedWrap disabled
                const int VALUE = 3;
                int x = VALUE;
                 
                if(x-3 == 0){
                 return 1;
                }
                 
                return 0;


              В результате, компилятор оптимизирует код до такого:

              ExpandedWrap disabled
                return 1;


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

                Отбрасывает потому, что это верно всегда! Так ведь об этом и речь: зачем считать, если всегда получаем истину. Как и для Х≠Х,которая всегда ложна.

                Допустим, имеется множество. И пусть задача состоит в том, чтобы выяснить: есть в в этом множестве какое-то значение. Эти их свойства (всегда истинно, всегда ложно) можно использовать, сравнивая в цикле каждый элемент множества с тем, что мы ищем. Тогда такая проверка даст ответ: есть или нет он в таком множестве. С точки зрения логики - это проверка на равно элемента с ним же самим!
                  Цитата ch19 @
                  Так ведь об этом и речь: зачем считать, если всегда получаем истину. Как и для Х≠Х,которая всегда ложна.

                  Никто и не считает... вы смотрели ссылки на дизасм что я скинул?

                  Добавлено
                  Цитата ch19 @
                  С точки зрения логики - это проверка на равно элемента с ним же самим!

                  Конечно нет. Для искомого числа , и для числа внутри множества у вас будут два совершенно разных адреса.
                    Цитата VisualProg @
                    Конечно нет. Для искомого числа , и для числа внутри множества у вас будут два совершенно разных адреса.

                    Я ведь другом. Если мы получили предварительный результат (пусть это будет некое число, например 5). И его же куда-то дальше подставляем, мы же не говорим, что эти пятерки разные,хоть они в разных местах на листочке пишутся. Также и программировании: число пять по адресу х - тоже, что число 5 по адресу y. Речь о числе, а не числе, записанному по определенному адресу.
                      Цитата ch19 @
                      мы же не говорим, что эти пятерки разные

                      Почему? Вполне возможен и такой исход, где две пятёрки совершенно разные.

                      Попробуйте ещё раз сформулировать вопрос, а то я не понимаю что вы хотите узнать)
                        Цитата VisualProg @
                        Попробуйте ещё раз сформулировать вопрос

                        Попробую.
                        1) В математике (=) это операция, которая при подстановке терма-слева и терма-справа, позволяет говорить об истинности или ложности всего высказывания.
                        2) В программировании (==) - это операция, которая при подстановке операнда-слева и операнда-справа, позволяет говорить об истинности или ложности всего высказывания.

                        Это одно и тоже.
                          Да, именно так и происходит. (Насчёт "подстановки" не ручаюсь говорить, но, происходит сравнение первого операнда со вторым)

                          Добавлено
                          Цитата
                          Это одно и тоже.

                          Возможно. Более того, программирование использует математический аппарат, логично, что есть одинаковые моменты.
                          Сообщение отредактировано: VisualProg -
                            Цитата VisualProg @
                            Да, именно так и происходит. (Насчёт "подстановки" не ручаюсь говорить, но, происходит сравнение первого операнда со вторым)

                            Добавлено 4 минуты назад
                            Цитата
                            Это одно и тоже.

                            Возможно. Более того, программирование использует математический аппарат, логично, что есть одинаковые моменты.

                            Спасибо за высказанные соображения!
                              Надеюсь, вы понимаете, что всё это корректно только до тех пор пока в качестве X выступают целые числа? (char/int/long), в случае для вещественных чисел могут быть небольшие отличия, а вот для остальных случаев - целый ряд условий и преобразований.
                                Не надо путать математику и программирование.

                                В математике X = Y - это некое утверждение о значениях величин (или выражений) X и Y, которое в зависимости от контекста может означать совершенно разные вещи.
                                Это может быть условие, которое надо проверить.
                                Или утверждение, что эти две величины равны, и тогда одну из них можно заменить на другую в остальных местах. Или вычислив значение одной из них можно узнать другую.

                                Так что это математическое равенство может в программировании соответствовать и X == Y, и X = Y, и Y = X, и есть ещё другие варианты, которые в программе в одну строчку не описываются.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0803 ]   [ 16 queries used ]   [ Generated: 28.03.24, 17:25 GMT ]