![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
E lasciamo la domanda sui difetti di Print() senza risposta, va bene? :)
Qualunque cosa.
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:
void OnStart() { double a,b; a=7.0/200.0; b=7.0/a; Print("Print(b)=",b); Print("Print(DoubleToString(b,16))=",DoubleToString(b,16)); }
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.9999999999999716
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 realtà si è scoperto che la funzione Print() produce dati leggermente arrotondati:
MP 0 victorg2 (EURUSD,M1) 11:04:42 Print(DoubleToString(b,16))=199.99999999999999999716
123.4567890123456(7>5, quindi arrotondato per eccesso)
Tutto sembra corrispondere alla descrizione. Qual è il problema, gli zeri non vengono stampati?
Il bug è che la funzione Print() non emette"Data of type double with an accuracy of 16 decimal digits after the dot".
controllare
Print("Print(b)="+ b);
controllare
Non mi sono preso la briga di controllare.
Prima di tutto, il compilatore genera "conversione implicita da 'numero' a 'stringa' victorg2.mq5 12 22".
Secondo,
IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.999999999999999716
Usate la funzione PrintFormat appropriata per un controllo completo del formato:
La stampa si basa sulla modalità di arrotondamento normale del doppio a 4 cifre. Correggeremo la documentazione.Per favore, datemi dei puntatori (handle) a strutture (preferibilmente anche ad array, compresi quelli statici).
L'avvolgimento in classi è spesso una cattiva soluzione:
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
Si prega di dare puntatori (handle) a strutture (preferibilmente anche ad array, compresi quelli statici).
Cosa intende e perché?
1. in che senso e
2. perché?
1.
CEmpty *C[]; // Это работает. SEmpty *S[]; // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19 1
Per creare array di puntatori a strutture (array). con successiva inizializzazione for(i){ S[i] = GetPointer(StaticStruct[i]); }
2. per conservare array solidi (impacchettati) di dati significativi.
Importante quando si ha a che fare con l'output di dati in buffer OpenCL grezzi (o l'invio a DLL, la scrittura su file, ecc.)
Allo stesso tempo, è possibile riordinare gli accessi ai dati (per esempio, quando si ordinano i puntatori) senza riscrivere i dati.