Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 65

 

Potete dirmi come ridurre la dimensione di un file di dati binari alla nuova dimensione dei dati senza rimuovere il file stesso, o può essere fatto solo chiamando una dll esterna?

 
Konstantin:

Potete dirmi come ridurre un file di dati binari a una nuova dimensione di dati senza rimuovere il file stesso, o è possibile farlo solo chiamando una dll esterna?

Ho bisogno di un analogo della funzione SetEndOfFile.

È stato chiesto circa 6 anni fa

 
Combinatore:

Abbiamo bisogno di un analogo della funzione SetEndOfFile.

È stato chiesto circa 6 anni fa.

È di questo che sto scrivendo )) perché non è kasher usare dll esterne o cancellare un file

 
Combinatore:

Abbiamo bisogno di un analogo della funzione SetEndOfFile.

È stato chiesto circa 6 anni fa.

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:

il file aumenterà solo di dimensione, se l'array di dati diminuisce di dimensione, il file rimarrà lo stesso

 
Konstantin:

Il file aumenterà solo di dimensione; se l'array di dati diminuisce di dimensione, il file rimarrà lo stesso

Diminuisce.

 
fxsaber:
È un'esagerazione, vero?
 
Combinatore:
È un'esagerazione.

Assolutamente!

 
Ancora una volta sul tema del doppio

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

fxsaber, 2018.01.15 11:53

Perché l'input fmod è doppio. Double non può memorizzare un numero enorme di numeri interi. Per esempio, il tuo caso:

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

Fate così.

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


Usando float come esempio, si può capire rapidamente la peculiarità del doppio

#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;
    }
}


Risultato

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


SZY double non perde tutto l'int-range, non così con long.

 
Konstantin:

è di questo che sto scrivendo )) perché non è kasher farlo attraverso dll esterne o la cancellazione di file

l'ho visto, volevo farlo ma l'ho dimenticato

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