Торговая платформа обладает множеством настроек, что позволяет организовать работу в ней так, как это удобно именно вам. Выполните команду " Настройки" меню "Сервис" или нажмите "Ctrl+O". Графики — общая настройка отображения ценовых графиков, а также настройка параметров управления объектами: выделение объектов после их создания, немедленная...
Ciao! Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
double expr1=1.0;
double expr2=2.8;
double step=0.2;
double i;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
int count=0;
for(i=expr1; i<=expr2; i+=step)
{
NormalizeDouble(i,1);
count++;
Print(" i: ",DoubleToStr(i,8)," step: ",DoubleToStr(step,8));
}
int MaxPass=(int)NormalizeDouble(((expr2-expr1)/step),0)+1;
Print(" MaxPass: ",MaxPass," count: ",count," i: ",i);
}
//+------------------------------------------------------------------+
Se "expr2=2.6" è ancora ok per 9 iterazioni, ma quando "expr2=2.8" mostra già 9 iterazioni errate (il valore corretto è 10).
Ciao! Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
Se "expr2=2.6" va ancora bene per 9 iterazioni, ma quando "expr2=2.8" mostra già 9 iterazioni errate (il valore corretto è 10).
Ciao! Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
Se "expr2=2.6", allora tutto è normale 9 iterazioni, ma quando "expr2=2.8" mostra non correttamente 9 iterazioni (correttamente 10).
Grazie, capisco perché succede, per questo ho cercato di normalizzarlo. Non ha funzionato per me. Anche l'opzione di Alexey Viktorov non ha risolto il problema, i valori rimangono non normalizzati. Quindi la domanda rimane, si può usare il "doppio" in un ciclo e ottenere sempre il numero corretto di iterazioni?
Quindi la domanda rimane, "doppio" può essere usato nel ciclo
può
Nauris Zukas:
e ottenere sempre il numero corretto di iterazioni?
il valore di double è sempre corretto, ma non corrisponde al sistema decimale posizionale che vorreste vedere o ottenere
Nauris Zukas:
Grazie, capisco perché questo accade, è per questo che ho cercato di normalizzare. Non ha funzionato per me. Anche l'opzione di Alexey Viktorov non ha risolto il problema, i valori rimangono non normalizzati
Qualsiasi manipolazione con la doppia conversione avrà sempre delle limitazioni, dubito che questo problema possa essere risolto come nei vostri esempi
Fate una soluzione affidabile: nel ciclo usate int e formula per calcolare il valore di risultato del doppio e non usate l'aggiunta del doppio come risultato durante le iterazioni nel ciclo - ancora una volta guardate il mio esempio nel dialogo con Nikolaev
L'ora è la stessa nella finestra deidati?
Sì.
Sì.
Capisco, quindi è davvero l'ora del bar. Ho solo avuto un sospetto sul parametro"Precise timeline".
Ciao!
Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
Se "expr2=2.6" è ancora ok per 9 iterazioni, ma quando "expr2=2.8" mostra già 9 iterazioni errate (il valore corretto è 10).
Ciao!
Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
Se "expr2=2.6" va ancora bene per 9 iterazioni, ma quando "expr2=2.8" mostra già 9 iterazioni errate (il valore corretto è 10).
Probabilmente devo normalizzare i valori.
Probabilmente bisogna normalizzare i valori.
Se intendevi questo, non è stato d'aiuto neanche questo:
Se intendevi questo, non è stato d'aiuto neanche questo:
No. Come minimo bisogna ottimizzarlo
perché è quello che vi dà il valore sbagliato. E gli altri potrebbero non doverlo fare.
Ciao!
Qual è il modo corretto di usare il "doppio" nel ciclo "for"? Sembra che non ci sia alcun divieto di usare "doppio" nell'aiuto. Capisco che devo normalizzare la "i", ma non funziona per me.
Se "expr2=2.6", allora tutto è normale 9 iterazioni, ma quando "expr2=2.8" mostra non correttamente 9 iterazioni (correttamente 10).
Qui potete trovare, leggete il post di Nikolay, una descrizione molto dettagliata e molto qualitativa del doppiohttps://www.mql5.com/ru/forum/1111/page2623#comment_14473837
Se non riuscite ad assimilare il materiale dalla prima volta, provate a sostituire Print() con printf() nel vostro codice con l'uscita del doppio almeno alla 15a cifrahttps://www.mql5.com/ru/forum/1111/page2623#comment_14474138.
Forse allora capirai perché è così
No. Come minimo bisogna ottimizzare questo
perché è quello che vi dà il valore sbagliato. E gli altri potrebbero non doverlo fare.
Grazie, ma anche il tuo esempio non ci ha dato il risultato giusto. In printf potete vedere che non avviene nessuna normalizzazione:
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.0000000000000000000000000000000000000000000000000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.199999999999999999995559107901499373838305473327636718750000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.399999999999991111182158029987476766109466552734375000000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.59999999999999999866773237044981212151491164199829101562500000000
0 10:29:31595 Test_Double_For EURCHF,H4: i = 1.7999999999999999982236431605997495353221893310546875000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 1.99999999999997779553950749686919152736638618359375000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 2.1999999999999997335464740899624302983283996582031250000000
0 10:29:31.595 Test_Double_For EURCHF,H4: i = 2.399999999999999999119182158029987476766109466552734375000000000
0 10:29:31595 Test_Double_For EURCHF,H4: i = 2.6000000000000088817841970012523233890533447265625000000000
0 10:29:31595 Test_Double_For EURCHF,H4: MaxPass: 10 count: 9
0 10:29:31.595 Test_Double_For EURCHF,H4: Last i = 2.800000000002664535259100375697016716003417968750000000
Eccolo, leggete il post di Nikolay, ha descritto il lavoro con il doppio in grande dettaglio e con grande qualitàhttps://www.mql5.com/ru/forum/1111/page2623#comment_14473837
Se non riuscite a digerire il materiale dalla prima volta, provate a sostituire Print() con printf() con l'uscita del doppio almeno fino alla 15a cifrahttps://www.mql5.com/ru/forum/1111/page2623#comment_14474138.
Forse allora capirete perché è così.
Grazie, capisco perché succede, per questo ho cercato di normalizzarlo. Non ha funzionato per me. Anche l'opzione di Alexey Viktorov non ha risolto il problema, i valori rimangono non normalizzati. Quindi la domanda rimane, si può usare il "doppio" in un ciclo e ottenere sempre il numero corretto di iterazioni?
Quindi la domanda rimane, "doppio" può essere usato nel ciclo
può
e ottenere sempre il numero corretto di iterazioni?
il valore di double è sempre corretto, ma non corrisponde al sistema decimale posizionale che vorreste vedere o ottenere
Grazie, capisco perché questo accade, è per questo che ho cercato di normalizzare. Non ha funzionato per me. Anche l'opzione di Alexey Viktorov non ha risolto il problema, i valori rimangono non normalizzati
Qualsiasi manipolazione con la doppia conversione avrà sempre delle limitazioni, dubito che questo problema possa essere risolto come nei vostri esempi
Fate una soluzione affidabile: nel ciclo usate int e formula per calcolare il valore di risultato del doppio e non usate l'aggiunta del doppio come risultato durante le iterazioni nel ciclo - ancora una volta guardate il mio esempio nel dialogo con Nikolaev