Rockman Опять-таки, это частный случай, даже те, 15 миллисекунд это погрешность, не более того, на самом деле их можно приравнять. Мне нужен конкретно общий случай, который бы всегда позволял получать удовлетворяющий вариант.
Из таких погрешностей в больших программах может сложиться приличное время. Естественно нет смысла в небольших программах заменять умножение сдвигом и я сам никогда этого не делал, заисключением тех программ, где эту замену требовало некоторое условие. Чаще всего это просто рассматривается как дополнительная информация, что битовые операции частенько бывают полезны и побыстрее.
Rockman ты потерял связь с моим предложением о погрешности. Я говорил про погрешность в пользу стандартного оператора умножения/деления. Я просто тебе пытаюсь донести, что этот способ не универсален, а если нет универсальности, то нет и смысла. Ибо какой толк использовать код, который на одном компьютере работает быстрее, на другом медленнее, на третьем одинаково.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Rockman ты потерял связь с моим предложением о погрешности. Я говорил про погрешность в пользу стандартного оператора умножения/деления. Я просто тебе пытаюсь донести, что этот способ не универсален, а если нет универсальности, то нет и смысла. Ибо какой толк использовать код, который на одном компьютере работает быстрее, на другом медленнее, на третьем одинаково.
Связь не потеряна, в своем сообщении я говорил о своих результатах и прекрасно понял о чем вы. Совершенно согласен, что способ абсолютно не универсален и смысла нет, я лишь пытался показать, что бывают случаи, когда все таки битовые операции немного опережают.
Из таких погрешностей в больших программах может сложиться приличное время
Quote
даже те, 15 миллисекунд это погрешность
Quote
В среднем на 15 миллисекунд сдвиги вправо и влево на один проигрывают стандартным умножением и делением
Погрешность в моем случаи, не в вашем.
Quote
я лишь пытался показать, что бывают случаи, когда все таки битовые операции немного опережают.
Чем именно вы показали? Частный случай (деления, умножения на 2) не является показателем. Хотя просто логически-рассуждая в процессе данных операций становится очевидным, что действительно будет работать быстрее. Здесь зависит опять же от умения программиста, его дальнозоркости. Можно и с побитовыми операциями сделать так, что будет в два, а то и три раза дольше, чем со стандартными способами. Просто есть случаи, когда действительно они помогают оптимизировать код, а иногда и вовсе не обойтись. В этом и их спецификация. Но все-таки это отход от темы.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Вторник, 07.02.2012, 23:25
Глупо сейчас доказывать, что я имел ввиду свои результаты, я это уже сказал, зачем мне повторяться.
Quote (toneysix)
Чем именно вы показали? Частный случай не является показателем.
Ваш случай такой же частный как и мой и по вашим словам - не показатель. Не поленился, нашел литературу, в которой первый раз увидел упоминание об эффективности битовых операций.
Не думаю, что есть смысл опровергать слова Герберта Шилдт (член комитетов ANSI/ISO, принимавший стандарт для языков C и C++)
Добавлено (07.02.2012, 23:34) --------------------------------------------- В любом случае хорошо, когда есть оппозиция и есть тема для спора
Ваш случай такой же частный как и мой и по вашим словам - не показатель.
Именно. Поэтому рассматривать его, с точки зрения оптимизации глупо.
Quote
Не думаю, что есть смысл опровергать слова Герберта Шилдт (член комитетов ANSI/ISO, принимавший стандарт для языков C и C++
А зачем вам думать?) Эти книги писались давно, соответственно, когда эти операции работали своеобразно и идентично от операторов деления/умножения. Теперь же, в самих компиляторах эти операторы умножения/деления оптимизированы и справляются со своей задачей не хуже, чем в двоичном представлении данных. К тому же, я бы на вашем месте не ориентировался на мнении каких-то "особых" людей. Всегда нужно проверять и закреплять свою практику.
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Вторник, 07.02.2012, 23:42
А зачем вам думать?) Эти книги писались давно, соответственно, когда эти операции работали своеобразно и идентично от операторов деления/умножения. Теперь же, в самих компиляторах эти операторы умножения/деления оптимизированы и справляются со своей задачей не хуже, чем в двоичном представлении данных. К тому же, я не бы на вашем месте не ориентировался на мнении каких-то "особых" людей. Всегда нужно проверять и закреплять свою практику.
Ну если книга 2011 года и для вас это давно, то вы правы во всем.
Rockman эммм) Не нужно за меня думать. Я вовсе так не думаю. Но суть вовсе не в синтаксисе языка. Дело все в компиляторе, в разных компиляторах по разному приведены операторы тех или иных арифметических действий, а также эти факторы, которые вы сами же перечисляли и приняли тот факт, что это не универсальный способ, а значит, он не может считаться общим случаем, а отсюда следует, что рассматривать его, как способ оптимизации было бы не практичным. Это все сделано и на ваших же основаниях. Что здесь непонятного?
Русскоязычныи портал о MTA/GTA-IV-MP | http://multi-theft-auto.ru
Сообщение отредактировал toneysix - Вторник, 07.02.2012, 23:50
которые вы сами же перечисляли и приняли тот факт, что это не универсальный способ, а значит, он не может считаться общим случаем, а отсюда следует, что рассматривать его, как способ оптимизации было бы не практичным. Это все сделано и на ваших же основаниях. Что здесь непонятного?
У меня тот же вопрос я с этим согласен был всегда.
Вычислительные операторы: + - сложение. Пример new var = 7 + 14; . Значение переменной var будет равно 21. - - вычитание. Пример new var = 14 + 7; . Значение переменной var будет равно 7. * - умножение. Пример new var = 7 * 3; . Значение переменной var будет равно 21. / - деление. Пример new var = 21 / 3; . Значение переменной var будет равно 7. % - деление с остатком. Пример new var = 5 % 3; . Значение переменной var будет равно 1.
Исправь Вычитание. вычитание. Пример new var = 14 + 7; . Значение переменной var будет равно 7.