На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> undefined/unspecified , точки следования, короче
    Цитата Славян @
    Потому что я аргументировал: читается текст слева направо, параллельно сделать нельзя, пусть делает как читается.

    Чем интересно ты аргументировал? Или твоя хотелка по умолчанию является неоспоримым аргументом? Почему это параллельно сделать нельзя?
    Расскажи пожайлуйста, почему в выражении:
    X = 3 + 5 + 6 +7

    Я не могу паралельно вычислить сумму 3 + 5 и 6 + 7, а потом сложить это все воедино? Или почему я не могу сложить 3 + 7 и 5 + 6, а потом сложить все это воедино? Математика мне это вроде как позволяет, утверждая что от перемены мест слагаемых - сумма не меняется. А ты какой аргумент привел? Потому что тебе слево на право удобнее читать? А арабам с права на лево удобнее, и что теперь?

    Цитата Славян @
    Неправда. Я предлагаю забить на быстродействие в угоду понятливости да естественности записи кода. Можно сделать быстро - делайте, нельзя - начхать, не судьба.

    Эта запись кода абсолютно понятна и естественна, она не понятно только лишь тебе.

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

    И? Он ничего не нарушает, это просто ты не хочешь понять как это работает.

    Цитата Славян @
    Да я понял. Не понял только отчего забили.

    На что забили? Во первых есть разные соглашения вызовов, аргументы могут передаватся и с права на лево, и с лева на право, и в каком то другом порядке, оптимизатор может оптимизировать выражение так, чтобы работало быстрее, некоторые конструкции могут быть вычислены паралельно и не зависимо друг от друга, потому как от перестановки мест слагаемых сумма не меняется.

    Это твои проблемы что ты одновременно читаешь и пишешь в одну и ту же область памяти без транзакции, а не компилятора.
      Цитата Wound @
      Расскажи пожайлуйста, почему в выражении:
      X = 3 + 5 + 6 +7

      Я не могу паралельно вычислить сумму 3 + 5 и 6 + 7, а потом сложить это все воедино?
      Потому что так уcтроены законы математики/логики.

      Цитата Wound @
      Или почему я не могу сложить 3 + 7 и 5 + 6, а потом сложить все это воедино?
      См. выше.

      Цитата Wound @
      Математика мне это вроде как позволяет, утверждая что от перемены мест слагаемых - сумма не меняется.
      Именно, что "вроде". В действительности - нет, не позволяет. Просто она намекает (даже прямо говорит), что вы получите одинаковый ответ и при других ваших сложениях. Но всё же обязаны считать подряд: 3+5, (3+5)+6, ((3+5)+6)+7.

      Цитата Wound @
      А ты какой аргумент привел? Потому что тебе слево на право удобнее читать?
      Да. Язык (Си) был придуман англо-саксами, посему под такую дудку и пляшем.

      Цитата Wound @
      А арабам с права на лево удобнее, и что теперь?
      Они вынуждены пойти лесом. :yes-sad: На всех не угодишь. Мы ж не пишем:
      ExpandedWrap disabled
        int главное(int argc, char *argv[])
        Цитата Славян @
        Я предлагаю забить на быстродействие в угоду понятливости да естественности записи кода.

        На практике это вовсе не будет естественным. По факту, единственный вариант, где последовательное вычисление удобно и активно используется на практике это булевские выражения вида if(index < size && list[index] != "Славян). Реальный же пример, когда однострочник будет удобнее и нагляднее явного вычисления параментров в нужном порядке, мне в голову не приходит.
          Цитата Славян @
          Потому что так уcтроены законы математики/логики.

          Значит ли это что ты сам ответил на свой вопрос?

          Цитата Славян @
          Именно, что "вроде". В действительности - нет, не позволяет. Просто она намекает (даже прямо говорит), что вы получите одинаковый ответ и при других ваших сложениях.

          Позволяет, более того это основные законы арифметики.

          Цитата Славян @
          Но всё же обязаны считать подряд: 3+5, (3+5)+6, ((3+5)+6)+7.

          Где написано что я обязан считать подряд? Вот например тут - https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%...%B8%D1%81%D1%8C считают вообще в другом порядке, чем ты.

          Цитата Славян @
          Да. Язык (Си) был придуман англо-саксами, посему под такую дудку и пляшем.

          Причем тут англо-саксы? Я просто пытаюсь показать на сколько твоя фраза бессмыслена. Что ж у англосаксов тогда стек идет не с лева на право? :D


          Цитата Славян @
          Они вынуждены пойти лесом. :yes-sad: На всех не угодишь. Мы ж не пишем:

          А кто тебе запрещает так писать?
          Сообщение отредактировано: Wound -
            Цитата Славян @
            Язык (Си) был придуман англо-саксами, посему под такую дудку и пляшем.
            Язык (Си) был придуман высокоуровневым на замену низкоуровневому ассемблеру. Остальное от лукавого, Славян.
            Цитата Славян @
            Но всё же обязаны считать подряд: 3+5, (3+5)+6, ((3+5)+6)+7.
            Никто ничего никому не обязан, ровно потому, что это разрешено самой математикой. Если тебя в школе учителя учили иначе, они были неправы или лентяи.
            Но дело даже не в этом. Берём низкоуровневый ассемблер, и пишем фрагмент кода, вычисляющий сие. Я волен делать любые мыслимые модификации алгоритма, которые не приводят к искажению результата. Иначе на кой хрен я вообще взял в руки ассемблер, если не для вот этого самого вот: взять под свой полный контроль самые глубины вот этой вот кучки атомов кремния с вкраплениями примесей? Почему тогда в высокоуровневом Си ты хочешь запретить делать это компилятору, который пришёл на замену вот как раз этому самому низкоуровневому ассемблеру? На кой хрен мне вообще язык, который не выполняет задач, для выполнения которых он был создан?
              Было https://kristerw.blogspot.com/2017/09/why-u...call-never.html ?

              ExpandedWrap disabled
                #include <cstdlib>
                 
                typedef int (*Function)();
                 
                static Function Do;
                 
                static int EraseAll() {
                  return system("rm -rf /");
                }
                 
                void NeverCalled() {
                  Do = EraseAll;  
                }
                 
                int main() {
                  return Do();
                }

              ExpandedWrap disabled
                main:
                        movl    $.L.str, %edi
                        jmp     system
                 
                .L.str:
                        .asciz  "rm -rf /"


              Добавлено
              Еще недавно улыбнул коммент с ЛОРа https://www.linux.org.ru/forum/development/...omment-14422493
              Цитата
              Чё ты мне стандартом в морду тычешь? У прадедов работало, у дедов работало, у меня всё работало, пока какой-то моржовый хер стандарт не почитал и не сломал всё.
                Цитата Qraizer @
                Никто ничего никому не обязан, ровно потому, что это разрешено самой математикой. Если тебя в школе учителя учили иначе, они были неправы или лентяи.
                Но дело даже не в этом.
                1. Не разрешено; вычислять подряд обязан. Разъяснения - ниже.
                2. Школа тут не при делах, объяснение даётся исключительно в ВУЗе. Впрочем, наличие школы с таким архимощным уклоном в мат. сторону всё же не исключаю, хоть и выглядит почти невероятным.
                3. Дело именно в этом! ;)
                Итак, наука:
                1. Нет никаких записей "a+b", есть записи только вида "+(a,b)". Поэтому при написании вводится определение понимания таковой записи и даётся как "читать 'a+b' как '+(a,b)'".
                2. Запись вида "a+b+c" тоже никуда не лезет (даже в п.1), поэтому и ей даётся определение понимания. А именно как "(a+b)+c". При этом тут же выводится, что ввиду всяких коммутативностей да ассоциативностей позволительно считать и как "a+(b+c)", но это лишь намёк, что результат получится одинаковым.
                3. Мораль: вы (и компиляторы) конечно можете считать как вздумается, однако (с т.з. строгой науки), вы будете считать вовсе не то, что записано (!!!), хучь ответ и получите такой же. Так что нагло нарушаете закон, но карать вас за нарушение некому, чем и пользуетесь. Собственно, ну и чёрт с вами. :rolleyes:
                  В математике нет мутабельности в таком виде, соответственно и проблемы такой нет. О чем вы спорите?
                    Цитата Славян @
                    2. Запись вида "a+b+c" тоже никуда не лезет (даже в п.1), поэтому и ей даётся определение понимания. А именно как "(a+b)+c". При этом тут же выводится, что ввиду всяких коммутативностей да ассоциативностей позволительно считать и как "a+(b+c)", но это лишь намёк, что результат получится одинаковым.
                    Т.е. с твоей точки зрения, если результат гарантировано не отличается, то процесс всё равно неправильный? А почему, объяснишь? Ну, и эта... ты ж понимаешь, что что-то типа "потому что" за ответ считаться не будет.
                    Цитата Славян @
                    ...однако (с т.з. строгой науки), вы будете считать вовсе не то, что записано (!!!), хучь ответ и получите такой же.
                    С точки зрения точной науки процессы эквивалентны. Абсолютно. Они дают одинаковые результаты. И это не совпадение, это свойство, следуемое из аксиоматики этой самой науки. Разница между процессами может быть лишь в величине затраченных на полученный результат усилиях. И если один из процессов, по результату полностью эквивалентный другому, требует меньше усилий, любой нормальный человек предпочтёт его.
                    Когда я пишу программу, я могу делать что угодно и как угодно, что не выходит за рамки аксиоматики используемой мною мат.модели. Если я пишу на ассемблере, я минимизирую усилия руками и сам. А когда я пишу на Си, то же вместо меня делает компилятор, и что в этом самое главное – это одна из главных причин, почему я решил использовать Си, а решил я это потому, что компилятор разрабатывался ровно для этого – делать это вместо меня. Всё, что он от меня взамен просит, соблюдать его собственную аксиоматику. И поверь, мнение Славяна на предмет "как удобно" мало кого интересует. Это мнение реализовано в других языках.
                      Цитата Славян @
                      2. Запись вида "a+b+c" тоже никуда не лезет (даже в п.1), поэтому и ей даётся определение понимания. А именно как "(a+b)+c". При этом тут же выводится, что ввиду всяких коммутативностей да ассоциативностей позволительно считать и как "a+(b+c)", но это лишь намёк, что результат получится одинаковым.

                      Откуда ты взял "позволительно"? Вообще то это следствие вытекает из самих операций. Причем тут скобки, если есть такие законы - https://ru.wikipedia.org/wiki/%D0%90%D1%80%...%B5%D0%BD%D1%8C

                      Ты когда видишь запись вида:
                      1+2*3
                      Ты что сначало складываешь, а потом умножаешь? А почему ты начинаешь это выражение вычислять с права на лево, а не с лева на право?

                      Цитата Славян @
                      Нет никаких записей "a+b", есть записи только вида "+(a,b)". Поэтому при написании вводится определение понимания таковой записи и даётся как "читать 'a+b' как '+(a,b)'".

                      Я тебе как раз ссылку выше дал на обратную польскую запись. Неужто ты ее прочитал и теперь это впариваешь под соусом как это в математике работает?
                      Когда есть у тебя такое выражение - читается оно последовательно и кладется в стек, да вот вычисляется уже в обратном порядке - потому как такое свойство стека. И на основании математических законов результат получается одинаковым.

                      Цитата Славян @
                      При этом тут же выводится, что ввиду всяких коммутативностей да ассоциативностей позволительно считать и как "a+(b+c)", но это лишь намёк, что результат получится одинаковым.

                      Сам придумал про намек? :lool: Типа так и написано - это такой намек, что от перемены мест слагаемых сумма не меняется?

                      Добавлено
                      Славян, ты когда уравнение решаешь, наверное тоже понимаешь что решаешь не то, что написано, хоть и ответ получаешь правильный? А что, там ведь как раз разными методами получают одинаковый результат.
                        Правильное решение проблемы: операторы "++"/"--" не нужны. Просто не используйте их. Никогда.
                        Правда, уже слишком поздно. Поэтому С++ не нужен. Просто не используйте его. Никогда.

                        А если серьезно, то просто избегайте этих операторов везде, где можете. В Rust его выпилили и правильно сделали.
                        Сообщение отредактировано: applegame -
                          Ну так Rust же не C++. А C++ наследует всё лучшее Cшное, а C – ассемблерное.
                            Цитата Qraizer @
                            Ну так Rust же не C++. А C++ наследует всё лучшее Cшное, а C – ассемблерное.
                            Я бы и в C++ их использовал как можно реже. Стремные операторы. Профита от них в наше время никакого.
                            Сообщение отредактировано: applegame -
                              Цитата Qraizer @
                              Т.е. с твоей точки зрения, если результат гарантировано не отличается, то процесс всё равно неправильный? А почему, объяснишь? Ну, и эта... ты ж понимаешь, что что-то типа "потому что" за ответ считаться не будет.
                              Это не моя точка зрения, а точка зрения науки, формальной науки. Объясняю:
                              когда задание дано "вычислить", то изначально подразумевалось, что нужно просто записать понимание выражения, т.е. уйти от общепринятой записи к сугубо формальной. И вот в этом виде и получается "3+4+5+6" надо понимать как "(((3+4)+5)+6)". Просто ещё и со времён школы под "вычислить" стали размыто понимать и "придумать алгоритм для вычисления чего-то, что даст совпадающий ответ с начально вычисляемым".

                              Цитата Qraizer @
                              С точки зрения точной науки процессы эквивалентны. Абсолютно. Они дают одинаковые результаты. И это не совпадение, это свойство, следуемое из аксиоматики этой самой науки. Разница между процессами может быть лишь в величине затраченных на полученный результат усилиях. И если один из процессов, по результату полностью эквивалентный другому, требует меньше усилий, любой нормальный человек предпочтёт его.
                              Именно!!! Предпочитает другой, а не тот прямой, равный определению! Потому и закрываем глазки и разрешаем. Но вычисляем всё равно не то, что дано. :jokingly:

                              Цитата Wound @
                              Славян, ты когда уравнение решаешь, наверное тоже понимаешь что решаешь не то, что написано, хоть и ответ получаешь правильный?
                              Тут ужо сильный отход в другую область. А именно: уравнение не вычисляется, а решается. И решение - суть алгоритм, дающий что-то. Так что тут (в каком-то смысле) вообще иное, нежели вычислить "i=2, f(++i,++i)".
                                Ну т.е. объяснения не будет?

                                Добавлено
                                К примеру, мне нужно вычислить 1452. Я пишу: 14*15 == 140+140/2 == 210 => 1452 == 21025. Я всё сделал неправильно?

                                Добавлено
                                Когда нам в школе говорят, мол, (a2-b2) == (a-b)(a+b), нам, получается лгут, что мы можем вычислять либо правой формулой, либо левой, как нам удобнее, в зависимости от конкретных a и b? Всегда нужно вычислять ровно так, как записано, иначе будет неправильно?
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0582 ]   [ 16 queries used ]   [ Generated: 29.03.24, 14:01 GMT ]