Domanda ai maestri di MQL4. Di nuovo a proposito di Double Compare. - pagina 10

 
Simca:
SK. ha scritto (a):

Le mie sincere condoglianze agli sviluppatori, dovendospiegare la stessa cosa1000 volte ad ogni nuovo utente...



Questo è già un attacco palese...
Sono d'accordo. Anche se SK. è un'autorità sul forum, ma la "tecnologia informatica specifica" rende sospettoso anche me.
È scritto nei libri di testo sulla memorizzazione dei numeri reali in memoria e non dice nulla sulle variabili che cambiano da sole. Anche se l'ho sentito dire non solo da SK su questo forum.
Quindi se avete ingannato ogni nuovo utente 1000 volte, ora dovreste trovarli e scusarvi per le vostre parole!

Sono d'accordo con Simca. Quando si eseguono operazioni aritmetiche gli errori sono possibili, ma quando si memorizza, si scrive o si legge sono esclusi!

Ecco perché ho chiesto l'algoritmo della funzione NormalizeDouble(), forse ha anche operazioni aritmetiche che causano un errore?
Cosa ne pensi Simca?
 

OK. Lo dici con tanta sicurezza che comincio a dubitare di quello che dici.

Fino a qualche tempo fa lavoravo su un vecchio PC con 256MB di RAM. Quando si cerca su Google qualche programma, il sistema operativo scaricava una parte dei dati sul disco e poi li ricaricava di nuovo. Da quando ho modificato il codice (specificando la normalizzazione nell'operatore di confronto) l'errore ha smesso di apparire. Ma ho cominciato a dubitare dopo aver sentito le tue parole - e se in realtà non avessi notato l'errore?

Ora non so se scusarmi o meno. Se mi sbaglio, che 1000 utenti mi perdonino.

(ma è comunque meglio eseguire la normalizzazione direttamente quando si calcola l'operazione di confronto:)

 
gravity001:
È scritto nei libri di testo sulla memorizzazione di numeri reali in memoria e non dice nulla sulle variabili che cambiano da sole. Non è soloSK che l'ho sentito su questo forum però.
Nulla di per sé viene cambiato durante la conservazione. Ma il modo in cui i numeri reali sono rappresentati nella memoria del computer influenza la precisione (profondità di bit) dei valori memorizzati. Quando si eseguono operazioni aritmetiche su numeri reali, il risultato è spesso "non abbastanza preciso" (dal punto di vista umano), quindi a volte è necessario normalizzare il risultato dell'operazione. È sicuramente necessario normalizzare il risultato delle operazioni in caso di confronto successivo all'uguaglianza (spesso a >, <). È anche necessario normalizzare il risultato se si opera con valori con la capacità di cifre rigorosamente impostate (per esempio, i prezzi). I calcoli intermedi con i numeri reali di solito non richiedono la normalizzazione.
Ma tutto questo riguarda i calcoli, mentre i valori immagazzinati in memoria non cambiano indipendentemente dal fatto che siano normalizzati o meno.
gravità001:
Ecco perché chiedevo l'algoritmo della funzione NormalizeDouble(), forse ha anche operazioni aritmetiche che causano un errore?
Cosa ne pensi Simca?
Bene, sull'algoritmo della funzione NormalizeDouble, dovreste chiedere agli sviluppatori, ai quali non appartengo. :) Inoltre, non è l'oggetto della controversia, perché la funzione NormalizeDouble in entrambi i frammenti di codice è stata utilizzata in modo assolutamente identico. L'unica differenza era nel confronto diretto dei risultati delle due normalizzazioni e nello scrivere questi risultati in variabili e poi confrontare i loro valori. E ho notato che poiché il tipo del valore restituito dalla funzione NormalizeDouble coincide con il tipo della variabile utilizzata per la memorizzazione, non ci sarebbe alcuna differenza tra i frammenti citati. Ma se la funzione NormalizeDouble restituisce un valore di dimensione maggiore della variabile in cui è memorizzato, allora la differenza potrebbe verificarsi e non possiamo essere sicuri che sia identica. Ma secondo l'HELP di MetaEditor il tipo di dati in entrambi i casi è doppio, quindi non dovrebbe esserci alcuna differenza, indipendentemente da come la funzione NormalizeDouble è implementata.
 
SK. писал (а):

(ma è comunque meglio eseguire la normalizzazione direttamente quando si calcola l'operazione di confronto:)

E con questo, applicato ad ogni nuovo utente, sono assolutamente d'accordo. Se non hai un'idea chiara di cosa e come funziona, è più ragionevole andare per la via più sicura e affidabile! Ma non riguarda te e me. :)
E da parte mia (per coloro che non comprendono appieno l'essenza della questione) posso anche raccomandare:

(ma comunque, è meglio eseguire la normalizzazione direttamente quando si calcola l'operazione di confronto (c) SK.

 
SK. писал (а):

(ma è ancora meglio fare la normalizzazione direttamente quando si calcola il
l'operazione di confronto è calcolata:)





Mi dispiace, ma in termini di efficienza ci sono implementazioni molto migliori per confrontare i dati che richiedono la normalizzazione. In generale, questo è lo standard (algoritmo di confronto). Devi confrontare la differenza con la metà della dimensione della scala. Cosa voglio dire: per confrontare i prezzi (che siano diversi o meno) dovresti prendere la differenza e confrontarla con 0,5*Roynt (può essere calcolato solo una volta durante l'inizializzazione di Expert Advisor/Script\indicator. Questo è molto più efficiente che chiamare una funzione, e ancora di più se è anche in un ciclo) .... E non avrà importanza come questi dati sono immagazzinati e a quale segno insignificante sono arrotondati.

Buona fortuna.
 
In primo luogo, lavorare con i dubles è puramente una cosa da compilatore, quindi pretendere convenienza da mql4, che è essenzialmente un compilatore intrinseco nascosto, è irragionevole. La cosa principale, gli sviluppatori hanno dato un modo per GARANTIRE il risultato corretto del confronto, lo abbiamo verificato con le nostre mani, è, naturalmente, grafico, ma FUNZIONANTE!!! Anche se la documentazione dice che normalizza solo in caso di "!=" o "==", i nostri test indipendenti ed esperti hanno dimostrato che (a>b) NON GARANTISCE (!) un risultato corretto se a risulta essere uguale a b! Anche se si normalizza PREDVORITAMENTE sia a che b, il risultato è imprevedibile: NormalizeDouble(a-b, Digits)>0 funziona in modo affidabile! Non so perché alla gente qui non piaccia la funzione normalize... Forse (internamente) è abbastanza sempotico fatto così: due tabelle sono divise per doppia precisione, e arrotondate per difetto (o per eccesso). In seguito, gli interi vengono confrontati senza problemi.
 
.FG писал (а):
In primo luogo, lavorare con i dubles è puramente una cosa da compilatore, quindi pretendere convenienza da mql4, che è essenzialmente un compilatore intrinseco nascosto, è irragionevole. La cosa principale, gli sviluppatori hanno dato un modo per GARANTIRE il risultato corretto del confronto, lo abbiamo verificato con le nostre mani, è, naturalmente, grafico, ma FUNZIONANTE!!! Anche se la documentazione dice che normalizza solo in caso di "!=" o "==", i nostri test indipendenti ed esperti hanno dimostrato che (a>b) NON GARANTISCE (!) un risultato corretto se a risulta essere uguale a b! Anche se si normalizza PREDVORITAMENTE sia a che b, il risultato è imprevedibile: NormalizeDouble(a-b, Digits)>0 funziona in modo affidabile! Non so perché alla gente qui non piaccia la funzione normalize... Forse (internamente) è abbastanza sempotico fatto così: due tabelle sono divise per doppia precisione, e arrotondate per difetto (o per eccesso). E dopo i numeri interi vengono confrontati senza problemi.

Si prega di scrivere in russo corretto.

 
Datemi un link al sito dello sviluppatore (della lingua russa), e prometto che userò SOLO le definizioni dell'autore. :) Secondo me, la tua idea non è più corretta della mia, ma se TU PERSONALMENTE vuoi capire, farò un "portavoce di Rosh", se non riesci a distinguere tra bla-blah e perizia. Perché ho scritto non te, e il 1001° principiante. :)
 
.FG писал (а):
Datemi un link al vostro sito e vi prometto che userò SOLO le DEFINIZIONI DELL'AUTORE. :) La tua idea, credo, non è più corretta della mia, ma se TU PERSONALMENTE vuoi capire, farò un "portavoce di Rosh", se non sai distinguere tra bla-bla e perizia. Perché non stavo scrivendo a te, ma al 1001° nuovo arrivato. :)

Per esempio www.gramota.ru

Non abbiamo una sezione albanese del forum. Tuttavia, dopo la prossima posta non russa sarete mandati lì. Per favore, non far sembrare che tu stia usando la lingua.

 
In questo caso tu, stringo, dovresti andare al Cirillo e Metodio con un certificato di merito per i risultati nella programmazione! Tutti questi problemi con la normalizzazione li ho riscontrati nei compilatori DOS liberi, che da tempo sono stati implementati convenientemente nelle versioni attuali. Ecco perché alcuni programmatori non capiscono perché hanno bisogno di un doppio controllo così obsoleto. Quando riscriveranno il loro codice, stipando ovunque la normolisi rispetto allo zero, saranno sorpresi di trovare l'assenza di errori nella loro stessa "logica C", e non il commento GIUSTO dei padri-esecutori, perché possono pigiare sull'ottimizzazione e altre cose secondarie. Ma le questioni riguardanti i RISULTATI dei calcoli di base rimarranno cruciali e richiederanno la massima attenzione. E se minacciate di mandarmi via di nuovo, andremo in qualche ECM, prenderemo la loro documentazione e scriveremo un programma con FIX e altri trucchi in OLBANIC. :) E sarai senza lavoro. Farai il tuo mq6 e vorrai che qualcuno testi almeno i tuoi prodotti in albanese, ma no, non ci saremo... Perché ci hai bandito in silenzio tu stesso... :)))))))))))))))))))))))000
Motivazione: