Erros, bugs, perguntas - página 717

 
sergeev:
curwords = NULL
porque então Print("next======",curwords.m_next!=NULL); não atira um erro?
 
fellow:
porque não Imprimir("next======",curwords.m_next!=NULL); atira um erro?

porque

curwords.m_next!=NULL


Zera referências quando cria objectos?

Não é NULL ao criá-lo.

Os programadores deram-lhe a função CheckPointer.

 
MoneyJinn:
O elemento com índice 0 é eliminado, enquanto que o elemento mais recente da matriz deve ser eliminado, isto é, com índice (n-1), onde n é o tamanho da matriz.
Espere. Primeiro, escreveu"ArrayResize() error when array size is reduced when ArraySetAsSeries() = true". Ou seja, o elemento mais "fresco" tinha um índice de 0. Será isto correcto?
 

reinicialização

int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;

o resultado é o mesmo

experimente-o você mesmo

 
fellow:

experimente-o você mesmo

porque devo tentar :)

funciona bem para mim :)))

 

Os ícones podem ser criados e exibidos conforme necessário.

O terminal escreve para a pasta Utilizador. Especifico a chave /portável no atalho.

 
fellow:

reinicialização

int OnInit()
{
firstwords.m_next=NULL; firstwords.m_prev=NULL;

o resultado é o mesmo

experimente-o você mesmo.

Por favor, escreva para Servicedesk. Especificar o SO, taxa de bits e construção do terminal. Por favor anexar o código fonte no qual o problema é reproduzido continuamente - vamos lidar com ele.

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Yedelkin:

OK. Então, vou tomar a coragem. Assim, a descrição da função Print() diz que "os dados do tipo duplo são impressos com a precisão de 16 dígitos decimais após o ponto". De facto, verifica-se que a função Print() produz dados de certa forma arredondados:

ND 0 victorg2 (EURUSD,M1) 11:04:42 Print(b)=200.0
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.999999999999999716

Obrigado por ter abordado o tema, um novo exemplo mais completo para a função Imprimir foi acrescentado à ajuda:

Exemplo:

void OnStart()
  {
//--- выведем 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
 
//--- посмотрим как выводится тип float
   float 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 - но это не так
//--- выведем вновь вычисленное значение b
   Print("----- после арифметических операций");
   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-013
   double 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)
  }
 

como é que conheço o Ponto para duas moedas?

para o instrumento actual:

double P1=Point();

digamos para moedas Símbolo1, Símbolo2?

 

O tamanho do item pode ser obtido com SymbolInfoDouble(symbol_name, propriedade).

ENUM_SÍMBOLO_INFO_DO_DUPLO

Identificador

Descrição

Tipo de propriedade

SYMBOL_BID

Oferta - melhor oferta para venda

duplo

SYMBOL_ASK

Perguntar - melhor oferta

duplo

SYMBOL_LAST

Preço a que a última transacção foi executada

duplo

SYMBOL_POINT

Valor de um pip

duplo