Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 144
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Su NaN è necessario controllare anche
Lì c'è un numero normale. Il controllo è semplice: dividi per quello per cui lo dividi, poi controlla se c'è uno zero.
Lì c'è un numero normale. Il controllo è semplice: per cosa lo si divide, si controlla che sia zero.
ma non si controlla lo zero in questo codice:
L'espressioneNum ? in MQL sarà vera se non c'è nessun valore 0x0000000000000000 in 8 byte di doppio
in ogni altro caso questa espressione(Num ?) sarà vera
Ho portato avanti una discussione all'inizio di questo mese sul non controllare bool in MQL - la risposta è nessuna perdita di dati, quindi non c'è bisogno - è lo stesso problema, si potrebbe provare a dividere l'espressione in NaN - i doppi byte non saranno vuoti?
Non posso controllare ora, ma probabilmente è il modo per farlo:
Ma non si controlla lo zero in questo codice:
Forum sul trading, sistemi di trading automatico e test di strategie di trading
Caratteristiche del linguaggio mql5, complessità e trucchi
fxsaber, 2019.10.28 11:42
Non posso controllare ora, ma probabilmente deve essere così:
Non funzionerà. Num è un numero normale nell'esempio dell'incidente. Il bool non c'entra niente.
Non funzionerà. Nell'esempio dell'incidente Num è un numero normale. Il bool non c'entra niente.
Ricerca NaN controllata
funziona davvero in MQL5, potete iniziare il ciclo da zero, ma dovrete aspettare più a lungo.
è una questione di doppia precisione - è legata a un tipo di processore specifico, ecco perché ho fatto i commenti precedenti che l'errore non viene riprodotto
UPD:
è meglio concludere così:
La tua domanda è generalmente una domanda sull'accuratezza del doppio - è generalmente legata a un tipo specifico di processore, che è il motivo per cui i commenti sopra sull'errore non è riproducibile
È riproducibile su qualsiasi tipo. Ad essere onesti, non capisco perché ci siano così tanti discorsi su questo argomento. Beh, hanno moltiplicato due numeri non zero e hanno ottenuto zero. Nessuna magia.
Tutti capiscono questo codice, vero?
Qui c'è una situazione assolutamente simile, quando d diventa zero.
Nessuna magia.
Questa è la magia, non stampata come questa:
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) ULongDouble.d != ULongDouble.d true
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) b_value = true
2019.10.28 16:25:28.643 tst1 (EURUSD,H4) d_value = nan
2019.10.28 16:25:28.667 tst1 (EURUSD,H4) zero divide in 'tst1.mq5' (28,31)
La situazione è assolutamente la stessa qui, quando d diventa zero.
Non mi riferisco allo zero. Nel tuo esempio, quando 0,1 * Num ? è un bool - è una semplice presenza di un bit in 8 byte di doppio
e quando 0,1 * Num è un doppio, allora se si perde la precisione, si può andare a Nan e ottenere una divisione a zero
DBL_MIN non è un doppio positivo minimo.
DBL_MIN è un doppio positivo non minimo.
Penso che il secondo numero abbia un formato doppio non valido, ma è ancora convalidato sia nella stampante che nelle operazioni.
Non l'ho capito qui.
DBL_MIN non è un doppio positivo minimo.
Bene, confrontate DBL_MIN con NaN - il risultato sarà in bool, giusto?
E se si divide 1,0 per un non numero, otterremo un'eccezione, come è stato detto sopra
in generale, il fatto che gli sviluppatori hanno scritto molte volte che confrontare a più di / meno di / uguale a doppio non è corretto - questo è vero, si può a volte ottenere un non numero e il risultato del confronto non sarà prevedibile.