Características da linguagem mql5, subtilezas e técnicas - página 65

 

Você pode me dizer como reduzir o tamanho de um arquivo de dados binários para o novo tamanho de dados sem remover o arquivo em si, ou só pode ser feito chamando uma dll externa?

 
Konstantin:

Você pode me dizer como reduzir um arquivo de dados binários para um novo tamanho de dados, sem remover o arquivo em si, ou só pode ser implementado chamando uma dll externa?

Eu preciso de um análogo da função SetEndOfFile.

Foi perguntado sobre isso há cerca de 6 anos.

 
Combinador:

Precisamos de um análogo da função SetEndOfFile.

Foi perguntado sobre isso há cerca de 6 anos.

É sobre isso que estou a escrever )) porque não é kasher usar dlls externas ou apagar um ficheiro

 
Combinador:

Precisamos de um análogo da função SetEndOfFile.

Foi perguntado sobre isso há cerca de 6 anos.

bool SetEndOfFile( const string FileName, const uint Size, const int Commong_Flag = 0 )
{
  uchar Buffer[];
  
  return((FileLoad(FileName, Buffer, Commong_Flag) > Size) && ArrayResize(Buffer, Size) && FileSave(FileName, Buffer, Commong_Flag)));
}
 
fxsaber:

o arquivo só vai aumentar de tamanho, se a matriz de dados diminuir de tamanho, o arquivo permanecerá o mesmo

 
Konstantin:

O arquivo só vai aumentar de tamanho; se a matriz de dados diminuir de tamanho, o arquivo permanecerá com o mesmo tamanho.

Diminui.

 
fxsaber:
Isso é um exagero dos diabos, não é?
 
Combinador:
Isso é um exagero dos diabos.

Absolutamente!

 
Mais uma vez sobre o tema do duplo

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

Bugs, bugs, perguntas

fxsaber, 2018.01.15 11:53

Porque o fmod de entrada é o dobro. O dobro não pode armazenar um grande número de inteiros. Por exemplo, o seu caso:

Print(DoubleToString((double)131472503841474907, 0)); // 131472503841474912

Faz isto.

long fmod( const long Value, const long Value2 )
{
  return(Value % Value2);
}


Usando o float como exemplo, você pode rapidamente entender a peculiaridade do duplo

#define  PRINT(A) Print(#A + " = " + (string)(A))

void OnStart()
{
  for (int i = 0; i < INT_MAX; i++)
    if ((int)(float)i != i)
    {
      PRINT(i);
      PRINT((float)i);
      PRINT((double)i);
      
      break;
    }
}


Resultado

i = 16777217
(float)i = 16777216.0
(double)i = 16777217.0


SZY duplo não perde todo o alcance, não tanto com o longo.

 
Konstantin:

é sobre isso que estou a escrever )) porque não é kasher fazê-lo através de dlls externas ou eliminação de ficheiros

viu, quis mas esqueceu

Ошибки, баги, вопросы
Ошибки, баги, вопросы
  • 2011.08.01
  • www.mql5.com
Общее обсуждение: Ошибки, баги, вопросы
Razão: