Un risultato davvero sorprendente!!! - pagina 7

 
MuruFigi >> :

Beh, sono più o meno d'accordo sulla seconda pagina che se è così, non dovremmo parlare di un bug nel compilatore, ma di un bug nel cervello degli sviluppatori. Senza offesa, ho fatto questo thread piuttosto per ridere.

Quello che non capisco ora è questo.

Su cosa è sviluppato il compilatore MQL? Se è sviluppato in un linguaggio normale, i programmatori devono essere impazziti per il fatto che le operazioni di moltiplicazione e aggiunta hanno la stessa priorità. Come hanno fatto a non accorgersene? Davvero tutti mettono le parentesi dove vogliono e dove no? A proposito, anche troppe parentesi rendono il codice più chiaro. E quando i vostri programmatori scrivono operazioni aritmetiche come 2+3*4 scrivono anche 2+(3*4), o Dio non voglia che un bug possa scivolare in un compilatore C++ e l'annidamento di 100 parentesi in un'espressione lo conti manualmente:)

Questo è un bug nei cervelli degli sviluppatori di C, Java, Fortran, MathCad ecc. ecc.


Come ancora non lo capisci!


ZS


Anche se, lo ammetto, anche io ci ho messo un po' a capirlo.

 
sol писал(а) >>

Anche se, lo ammetto, anche io ci ho messo un po' a capirlo.

Solo ora è diventato chiaro perché alcune combinazioni logiche non volevano funzionare correttamente. Ho dovuto aggiungere delle parentesi artificiali.

Non potevo spiegarlo prima. Ma non ho nemmeno sollevato l'argomento. Sono riuscito a trovare la soluzione giusta curiosando in giro. Ma quante volte ho dovuto frugare per cambiare tutto?

 
nen >> :

Solo ora è diventato chiaro perché alcune combinazioni logiche non volevano funzionare correttamente. Ho dovuto aggiungere delle parentesi artificiali.

Prima non c'era nulla che lo spiegasse. Ma non l'ho nemmeno tirato fuori. Sono riuscito a trovare la soluzione giusta curiosando in giro. Ma quante volte ho dovuto frugare per trovare tutto?

RTFM


*rofl*

 
MuruFigi >>: Davvero tutti mettono le parentesi dove dovrebbero e dove non dovrebbero?

Beh, non tutti in fila, ovviamente, ma lo faccio sempre. E puramente per abitudine li ho messi molto prima di scoprire questo "bug nella testa degli sviluppatori". E perché devo addentrarmi ancora una volta in Aiuto per capire le priorità, se posso farne a meno, mettendo le parentesi? Quindi per me questo "bug" non è stato un disastro, anche se mi ha divertito.

E prima, quando scrivevo qualcosa di booleano in C, li mettevo anche, anche se non avevo dubbi sulle priorità. Ad essere onesti, credo che un'espressione booleana complessa senza parentesi sia poco leggibile.

P.S. Per favore non usate un esempio idiota come 2+3*4. Se una mossa così intelligente con le priorità fosse accaduta per le operazioni aritmetiche, non avrei assolutamente scrupoli a chiamarlo un vero bug.

A proposito:

  1. La legge della distribuibilità (apertura delle parentesi):
    x 1 o (x 2 e x 3 ) = (x 1 o x 2 ) e (x 1 o x 3 )
    x 1 e (x 2 o x 3 ) = (x 1 e x 2 ) o (x 1 e x 3 )
  2. ...

Ne consegue che dal punto di vista dell'algebra booleana, le operazioni e e hanno la stessa priorità.

Andrei, cosa ti ha dato effettivamente l'idea che le priorità di queste operazioni nell'algebra booleana siano uguali? Controesempio:

a=1, b=0, c=0

(a o b) e c = (1 o 0) e 0 = 0

a o (b e c) = 1 o (0 e 0) = 1

 
Se lo sviluppatore era straniero, il topicstarter sarebbe stato almeno ringraziato per aver trovato il bug. E l'argomento sarebbe stato rapidamente chiuso riferendo che il lavoro sulla correzione è già in pieno svolgimento: tengono alla loro reputazione (costa un sacco di soldi). E noi diciamo "scemo", leggi la documentazione, le specifiche, le tabelle, ecc. Questo non sarebbe il caso se MT4 avesse un concorrente.
 
MuruFigi >> :

In cosa è sviluppato il compilatore MQL? Dopotutto, se è sviluppato in un linguaggio normale, i programmatori avrebbero dovuto essere prima di tutto scioccati dal fatto che le loro operazioni di moltiplicazione e aggiunta hanno la stessa priorità. Come hanno fatto a non accorgersene?

Bene, ecco un altro esempio di esagerazione. Eppure l'iniziatore del topic riferisce di aver iniziato il thread per scherzo, e di aver letto la documentazione a questo punto, dopo tutto.

 
Rosh >> :

Bene, ecco un altro esempio di esagerazione. Eppure l'iniziatore dice di aver iniziato il topic per scherzo, e di aver letto la documentazione a questo punto, dopo tutto.

Ce l'ho :-) Forse è vero che le grandi scoperte si fanno a proprio agio con obiettivi molto diversi.

 
Galaxy >> :

Ne ho avuto abbastanza :-). Forse è vero che le grandi scoperte si fanno a proprio agio, avendo ben altri scopi.

Questa "scoperta" difficilmente si qualifica come una grande scoperta. Vale la pena dichiarare solo il fatto e dimenticarlo. In generale, il tema della priorità delle operazioni booleane è inverosimile: sarebbe più conveniente per gli sviluppatori vietare semplicemente di costruire espressioni booleane con diverse operazioni senza parentesi e considerare tali costruzioni come non valide.

 
Mathemat >> :

Andrew, da cosa deduci effettivamente che le priorità di queste operazioni nell'algebra booleana sono uguali? Controesempio:

a=1, b=0, c=0

(a o b) e c = (1 o 0) e 0 = 0

a o (b e c) = 1 o (0 e 0) = 1

a = bello

b = intelligente

c = ricco

x = a && b && c ;

y = a || b || c ;


Mi chiedo quale preferiresti, Andrei: x = 1 o y = 1?

 
Mathemat >> :

Andrew, da cosa, infatti, hai dedotto che le priorità di queste operazioni nell'algebra booleana sono uguali?

Dalla simmetria delle operazioni. E la simmetria delle operazioni segue direttamente dalle formule assegnate.

Un'operazione simmetrica non può avere la precedenza su un'altra.

>> :

Mi chiedo, cosa preferirebbe Andrey: x = 1 o y = 1?

Preferirei, Eric, discutere senza andare sul personale e senza sghignazzare.

___________________________________

Comunque, il mio punto è.

Il risultato dell'espressione A && B || C è indefinito in termini di algebra booleana.