Erreurs, bugs, questions - page 705

 
Yedelkin:
Et laissons la question des défauts de Print() sans réponse, d'accord ? :)
Comme vous voulez.
 
victorg:
Peu importe.

OK. Alors je vais prendre le courage à deux mains. Ainsi, la description de la fonction Print() indique que "les données de type double sont imprimées avec la précision de 16 chiffres décimaux après le point". En fait, il s'avère que la fonction Print() produit des données quelque peu arrondies:

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

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.99999999999716
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
Документация по MQL5: Основы языка / Типы данных / Вещественные типы (double, float)
  • www.mql5.com
Основы языка / Типы данных / Вещественные типы (double, float) - Документация по MQL5
 
Yedelkin:

OK. Alors je vais prendre le courage à deux mains. Ainsi, la description de la fonction Print() indique que "les données de type double sont imprimées avec la précision de 16 chiffres décimaux après le point". En fait, il s'est avéré que la fonction Print() produit des données légèrement arrondies:

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

123.4567890123456(7>5, donc arrondi au supérieur)

Il semble être conforme à la description. Quel est le défaut ? Les zéros ne sont pas imprimés ?
 
MetaDriver:
Tout semble correspondre à la description. Quel est le problème ? Les zéros ne sont pas imprimés ?
Le bogue est que la fonction Print() n'imprime pas"Data of the double type accurate to 16 decimal digits after the dot".
 
Yedelkin:
Le bogue est que la fonction Print() n'affiche pas"Data of type double with an accuracy of 16 decimal digits after the dot".

vérifier

 Print("Print(b)="+ b);
 
sergeev:

vérifier

Je n'ai pas pris la peine de vérifier.

//+------------------------------------------------------------------+
//|                                                      ProjectName |
//|                                      Copyright 2012, CompanyName |
//|                                       http://www.companyname.net |
//+------------------------------------------------------------------+
void OnStart()
  {
   double a,b;
   a=7.0/200.0;
   b=7.0/a;
   //Print("Print(b)=",b);
   Print("Print(b)="+b);
   Print("Print(DoubleToString(b,16))=",DoubleToString(b,16));
  }
//+------------------------------------------------------------------+

Tout d'abord, le compilateur génère "implicit conversion from 'number' to 'string' victorg2.mq5 12 22".

Deuxièmement,

IS 0 victorg2 (EURUSD,M1) 17:46:45 Print(b)=200
PJ 0 victorg2 (EURUSD,M1) 17:46:45 Print(DoubleToString(b,16))=199.99999999999716

 

Utilisez la fonction PrintFormat appropriée pour un contrôle complet du format :

void OnStart()
  {
   double a,b;
   a=7.0/200.0;
   b=7.0/a;
   printf("Format: %.15lf",b);
   PrintFormat("Format: %.15lf",b);
  }

Format: 199.999999999999970
Format: 199.999999999999970
L'impression se fait par défaut en mode d'arrondi normal de deux à quatre chiffres. Nous allons corriger la documentation.
Документация по MQL5: Общие функции / PrintFormat
Документация по MQL5: Общие функции / PrintFormat
  • www.mql5.com
Общие функции / PrintFormat - Документация по MQL5
 

Veuillez me donner des pointeurs (handles) vers des structures (de préférence aussi vers des tableaux, y compris statiques).

L'enveloppement dans les classes est souvent une mauvaise solution :

struct SEmpty
  {
  };
  
class CEmpty
  {
  };
void OnStart()
  {
   Print("sizeof(SEmpty) = ",sizeof(SEmpty));   
   Print("sizeof(CEmpty) = ",sizeof(CEmpty));
  }
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(CEmpty) = 16
2012.04.07 20:49:38 SizeOf_Test (USDJPY,M30) sizeof(SEmpty) = 0
 
MetaDriver:

Veuillez donner des pointeurs (handles) sur les structures (de préférence sur les tableaux également, y compris les tableaux statiques).

Que voulez-vous dire et pourquoi ?

 
Renat:

1. dans quel sens et

2. pourquoi ?

1.

CEmpty  *C[];  // Это работает.
SEmpty  *S[];  // Error: 'SEmpty' - class type expected SizeOf_Test.mq5 19      1

Pour créer des tableaux de pointeurs vers des structures (tableaux). avec une initialisation ultérieure for(i){ S[i] = GetPointer(StaticStruct[i]) ; }

2. conserver des tableaux solides (emballés) de données significatives.

Important lorsqu'il s'agit de la sortie de données vers des tampons OpenCL bruts (ou l'envoi vers une DLL, l'écriture dans des fichiers, etc.)

En même temps, il est possible de réorganiser les accès aux données (par exemple, lors du tri des pointeurs) sans réécrire les données.