MoneyJinn: L'elemento con indice 0 viene cancellato, mentre l'elemento più recente dell'array dovrebbe essere cancellato, cioè con indice (n-1), dove n è la dimensione dell'array.
Aspetta. Per prima cosa, hai scritto"ArrayResize() error when array size is reduced when ArraySetAsSeries() = true". Cioè, l'elemento più "fresco" aveva un indice di 0. È corretto?
int OnInit() { firstwords.m_next=NULL; firstwords.m_prev=NULL;
il risultato è lo stesso
Provate voi stessi.
Si prega di scrivere a servicedesk. Specificare il sistema operativo, il bit rate e la costruzione del terminale. Si prega di allegare il codice sorgente su cui il problema viene riprodotto continuamente - occupiamocene.
OK. Allora mi prendo il coraggio. Così, la descrizione della funzione Print() dice che "i dati di tipo doppio sono stampati con la precisione di 16 cifre decimali dopo il punto". In effetti, si scopre che la funzione Print() produce dei dati un po' arrotondati:
Grazie per aver sollevato l'argomento, un nuovo esempio più completo per la funzione Print è stato aggiunto all'aiuto:
Esempio:
voidOnStart()
{
//--- выведем DBL_MAX с помощью Print(), это равносильно PrintFormat(%%.16G,DBL_MAX)Print("---- как выглядит DBL_MAX -----");
Print("Print(DBL_MAX)=",DBL_MAX);
//--- теперь выведем число DBL_MAX с помощью PrintFormat()PrintFormat("PrintFormat(%%.16G,DBL_MAX)=%.16G",DBL_MAX);
//--- Вывод в журнал "Эксперты"// Print(DBL_MAX)=1.797693134862316e+308// PrintFormat(%.16G,DBL_MAX)=1.797693134862316E+308//--- посмотрим как выводится тип floatfloat c=(float)M_PI; // нужно явно приводить к целевому типуPrint("c=",c, " Pi=",M_PI, " (float)M_PI=",(float)M_PI);
// c=3.14159 Pi=3.141592653589793 (float)M_PI=3.14159//--- покажем, что может произойти при арифметических операциях над вещественными типамиdouble a=7,b=200;
Print("---- перед арифметическими операциями");
Print("a=",a," b=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- разделим a на b (7/200)
a=a/b;
//--- теперь как будто восстановим значение в переменной b
b=7.0/a; // ожидается, что b=7.0/(7.0/200.0)=>7.0/7.0*200.0=200 - но это не так//--- выведем вновь вычисленное значение bPrint("----- после арифметических операций");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=200.0// Print(DoubleToString(b,16))=199.9999999999999716 (видим, что на самом деле b уже не равно 200.0) //--- создадим очень маленькое значение epsilon=1E-013double epsilon=1 e-13;
Print("---- создадим очень маленькое число");
Print("epsilon=",epsilon); // получим epsilon=1E-013//--- теперь вычтем эпсилон из числа b и выведем снова значение в журнал "Эксперты"
b=b-epsilon;
//--- выводим двумя способамиPrint("---- после вычитания epsilon из переменной b");
Print("Print(b)=",b);
Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
//--- вывод в журнал "Эксперты"// Print(b)=199.9999999999999 (теперь значение b после вычитания эпсилон не может округлиться до 200)// Print(DoubleToString(b,16))=199.9999999999998578// (теперь значение b после вычитания эпсилон не может округлиться до 200)
}
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.
curwords = NULL
perché Print("next======",curwords.m_next!=NULL); non lancia un errore?
perché
curwords.m_next!=NULL
Azzerate i riferimenti quando create gli oggetti?
Non è NULLA quando lo si crea.
Gli sviluppatori vi hanno dato la funzione CheckPointer.
L'elemento con indice 0 viene cancellato, mentre l'elemento più recente dell'array dovrebbe essere cancellato, cioè con indice (n-1), dove n è la dimensione dell'array.
resettare
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;
il risultato è lo stesso
prova tu stesso
prova tu stesso
perché dovrei provarlo :)
funziona bene per me :))
Le icone possono essere impostate e visualizzate come richiesto.
Il terminale scrive nella cartella User. Specifico la chiave /portable nel collegamento.
resettare
int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;
il risultato è lo stesso
Provate voi stessi.
Si prega di scrivere a servicedesk. Specificare il sistema operativo, il bit rate e la costruzione del terminale. Si prega di allegare il codice sorgente su cui il problema viene riprodotto continuamente - occupiamocene.
OK. Allora mi prendo il coraggio. Così, la descrizione della funzione Print() dice che "i dati di tipo doppio sono stampati con la precisione di 16 cifre decimali dopo il punto". In effetti, si scopre che la funzione Print() produce dei dati un po' arrotondati:
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999999716
Grazie per aver sollevato l'argomento, un nuovo esempio più completo per la funzione Print è stato aggiunto all'aiuto:
Esempio:
come faccio a sapere il punto per due valute?
per lo strumento corrente:
diciamo per le valute Symbol1, Symbol2?
Ladimensione dell'elemento può essere ottenuta con SymbolInfoDouble(symbol_name, property).
ENUM_SYMBOL_INFO_DOUBLE
Identificatore
Descrizione
Tipo di proprietà
SIMBOLO_BID
Offerta - migliore offerta per la vendita
doppio
SYMBOL_ASK
Chiedi - migliore offerta
doppio
SIMBOLO_INDIETRO
Prezzo al quale è stato eseguito l'ultimo scambio
doppio
PUNTO SIMBOLO
Valore di un pip
doppio