Воистину поразительный результат!!! - страница 6

 
Reshetov писал(а) >>

В свое время Клайв Синклер разработал дешевый персональный компьютер ZX-Spectrum. После того, как первая версия разошлась нехилым тиражом, выяснилось, что разработчики насажали в ПЗУ хренову тучу багов. Дык приняли адекватное решение, поскольку много компьютеров уже разошлись, то ошибки не править, дабы была полная совместимость с предыдущими версиями, а задокументировать. И решение оказалось правильным, т.к. баги впоследствии стали использоваться для защиты ПО этого самого копьютера от взлома.


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

Обсуждение этой ошибки, надеюсь, сподвигнет разработчиков в MQL5 эту ошибку исправить. Все равно предется все программы на MQL5 переписывать.

 
nen >>:

Обсуждение этой ошибки, надеюсь, сподвигнет разработчиков в MQL5 эту ошибку исправить. Все равно предется все программы на MQL5 переписывать.

Доказательство того, что это ошибка, в студию!

Собсно утверждение обратного:


Основные законы булевой алгебры

Две формулы булевой алгебры равносильны (равны, эквивалентны), если равны сопоставляемые им функции (т.е. они принимают одинаковые значения на всех наборах значений аргументов). Ниже даны основные законы булевой алгебры, позволяющие проводить тождественные преобразования формул булевой алгебры (обратите внимание, насколько они похожи на законы классической арифметики):

  1. закон двойного отрицания: not not x = x
  2. закон коммутативности (от перестановки аргументов результат не меняется):
    x 1 or x 2 = x 2 or x 1
    x 1 and x 2 = x 2 and x 1

  3. закон ассоциативности (порядка вычислений):
    x 1 or (x 2 or x 3 ) = (x 1 or x 2 ) or x 3
    x 1 and (x 2 and x 3 ) = (x 1 and x 2 ) and x 3

  4. закон дистрибутивности (раскрытия скобок):
    x 1 or (x 2 and x 3 ) = (x 1 or x 2 ) and (x 1 or x 3 )
    x 1 and (x 2 or x 3 ) = (x 1 and x 2 ) or (x 1 and x 3 )
  5. ...

Из чего следует, что с точки зрения булевой алгебры операции or и and имеют одинаковый приоритет.

 
Это не ошибка. Это под%#%ка.
 
TheXpert писал(а) >>

закон дистрибутивности (раскрытия скобок):
x 1 or (x 2 and x 3 ) = (x 1 or x 2 ) and (x 1 or x 3 )
x 1 and (x 2 or x 3 ) = (x 1 and x 2 ) or (x 1 and x 3 )

Из чего следует, что с точки зрения булевой алгебры операции or и and имеют одинаковый приоритет.

Не надо софистикой заниматься. Ваш пример отличается от того, с чего началось обсуждение. Посмотрите внимательнее.

 
keekkenen писал(а) >>

собственно, для программиста это не тема для рассуждений, потому что спецификация каждого языка стоит на первом месте и совсем не важно что где-то другие стандарты..

а единый стандарт это несбыточная мечта, сами знаете..

На мой взгляд, это наиболее адкватная мысль.

Каждый язык имеет свои стандарты. Например, в С++ и Паскале разные правила вычисления целых чисел. В одних языках индексы начинаются с 0, в других с 1. По-моему, это всё совершенно неважно.

Важным является неправильное трактование законов природы, т.е. тех, которые неподвластны человеку. А правила и законы, создаваемые людьми, - прерогатива их создателей. В этом деле важно лишь, чтоб законы были оглашены; в данном случае правила опубликованы.

Давайте лучше сосредоточимся на прикладной области..:)

 

Господа, на второй страницу этой ветки я давал ссылку и цитату из документации - Приоритеты и порядок выполнения операций. Дам еще раз в сжатом виде:

Внимание: приоритет выполнения операций в языке MQL4 несколько отличается от приоритета, принятого в языке Си.


Поэтому, говорить о наличии бага некорректно.

 

Вспомнил юмореску Задорнова "Сколько будет два плюс два умножить на два". Хорошая иллюстрация религиозных споров о приоритете. А вообще тема-то с бородой, можно было и поиском по сайту воспользоваться - вместо того чтобы новую ветку создавать.

P.S. Эхх, вражина MuruFigi, и почто Пака подставил...

 
Mathemat писал(а) >>

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

Тема и далее будет актуальной. Разработчикам это, видимо, приятно.

Очередной "новенький" программист будет биться головой об эту тему... И все повторится (хи-хи)

И это не из воздуха берется.

Разработчики решили всех переучивать на свой манер...

Тема будет вечной... пока на том конце провода не надоест.... упорствовать

 
Mathemat писал(а) >>

религиозных споров о приоритете

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

..

Простой пример "на себе", при использовании if() часто вылезает косяк - при комбинировании && и серии условий >/</!=, что очень странно,

копируешь цепочку Comment() для просмотра - 1, 1, 1, 1, етс - все ок, а if() не "срабатывает", делаешь "лесенку" if() { if() { if() { ... }}}

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

 
Rosh писал(а) >>

Господа, на второй страницу этой ветки я давал ссылку и цитату из документации - Приоритеты и порядок выполнения операций. Дам еще раз в сжатом виде:

Внимание: приоритет выполнения операций в языке MQL4 несколько отличается от приоритета, принятого в языке Си.

Поэтому, говорить о наличии бага некорректно.

Ну я вроде на второй странице согласился, что мол если так, то нужно говорить не о баге в компиляторе, а о баге в мозгах разработчиков. Без обид, я эту тему скорее для смеха сделал.

Мне вот что непонятно теперь.

На чем разрабатывается компилятор MQL? Ведь если он разрабатывается на нормальном языке, то программистов в первую очередь должно было расколбасить от того, что у них операции умножения и сложения имеют равный приоритет. Как они могли такое пропустить? Что неужели все подряд ставят скобки где нужно и где не нужно? Кстати, большое количество скобок тоже ухудшает наглядность кода. А когда ваши программисты пишут арифметичечкие операции типа 2+3*4 они тоже пишут 2+(3*4), а то не дай Бог бага проскочит в компиляторе С++ да и вложенность 100-ста скобок в одном выражении вручную посчитать это ж кайф:)

Причина обращения: