Semplicemente non dovreste aspettarvi che se non c'è un valore, è necessariamente 0 e corrispondentemente falso se non è una variabile di tipo bool. Anche una conversione esplicita in bool non aiuta.
Funziona così senza errori.
Onestamente non capisco affatto da dove viene lo zero:
TickValue[0] contiene spazzatura. Può essere o meno uguale a zero.
Se il cestino in TickValue[0] non è uguale a zero, allora calcoliamo Points = Profit / Lots * cestino non zero * _Point, altrimenti, se il cestino in TickValue[0] è uguale a zero - equipariamo Points a zero.
E da dove prende lo zero l 'espressione Lots * spazzatura non zero * _Point, se Lots è inizializzato con uno quando viene dichiarato? C'è zero in _Point?
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Semplicemente non dovreste aspettarvi che se non c'è un valore, è necessariamente 0 e corrispondentemente falso se non è una variabile di tipo bool. Anche una conversione esplicita in bool non aiuta.
Funziona così senza errori.
Onestamente non capisco affatto da dove viene lo zero:
TickValue[0] contiene spazzatura. Può essere o meno uguale a zero.
Se il cestino in TickValue[0] non è uguale a zero, allora calcoliamo Points = Profit / Lots * cestino non zero * _Point, altrimenti, se il cestino in TickValue[0] è uguale a zero - equipariamo Points a zero.
E da dove prende lo zero l 'espressione Lots * spazzatura non zero * _Point, se Lots è inizializzato con uno quando viene dichiarato? C'è zero in _Point?
L'errore è chiaro infatti.
OK, l'errore non è chiaro. E non si riproduce nemmeno per me.
Ok, l'errore è incomprensibile. E non si riproduce a me.
In parole povere, chiamare questa funzione può causare la divisione per zero.
Ho incontrato questo problema in pratica nella libreria Report. Poi ho capito che è logico.
In parole povere, chiamare questa funzione può causare la divisione per zero.
Ho questo codice su border dubles, ma non va in crash
Ottengo lo stesso codice su border dubles, ma non si blocca
un tale incidente.
Per riassumere, la moltiplicazione di due doppietti non nulli può dare zero. E questo non è un caso degenerato, ma un caso reale nella pratica.
Approssimativamente, un EA da combattimento può rompersi a causa di questo con una probabilità tutt'altro che nulla.
E il controllo dello zero non salverà, né esplicitamente né implicitamente (conversione bool)
Per riassumere, la moltiplicazione di due doppietti non nulli può dare zero. E questo non è un caso degenerato, ma un caso reale nella pratica.
Approssimativamente, un EA da combattimento può rompersi a causa di questo con una probabilità tutt'altro che nulla.
su NaN è necessario controllare ulteriormente, molto probabilmente questo codice funzioneràhttp://qaru.site/questions/20557/checking-if-a-double-or-float-is-nan-in-c
o limitare la precisione, come nell'esempio di CompareDoubles() - sembra essere in SBhttps://www.mql5.com/ru/docs/basis/types/double