ArrayFromFP8

Copie un tableau de type uchar dans un tableau de type float ou double avec le format donné.

bool   ArrayFromFP8(
   const float&         dst_array[],        // destination
   const uchar&         src_array[],        // source
   ENUM_FLOAT8_FORMAT   fmt                 // format
   );

Surcharge pour le type "double"

bool   ArrayFromFP8(
   const double&        dst_array[],        // destination
   const uchar&         src_array[],        // source
   ENUM_FLOAT8_FORMAT   fmt                 // format
   );

Paramètres

dst_array[]

[out] Tableau destination d'élements de type float ou double.

src_array[]

[in] Tableau source de type uchar.

fmt

[in]  Copie du format à partir de l'énumération ENUM_FLOAT8_FORMAT.

 

Valeur de Retour

Renvoie true en cas de succès ou false sinon.

Note

Tous les types de format FP8 sont définis dans l'énumération ENUM_FLOAT8_FORMAT et sont utilisés dans MQL5 uniquement pour les opérations avec des <li4 >modèles ONNX.

Si les paramètres de sortie obtenus à partir de l'exécution de la fonction OnnxRun sont du FP8 de l'énumération ENUM_FLOAT8_FORMAT, vous pouvez utiliser cette fonction pour convertir le résultat en tableaux flottants ou doubles.

FP8 (virgule flottante 8 bits) est l'un des types de données utilisés pour représenter les nombres à virgule flottante. Dans FP8, chaque nombre est représenté par 8 bits de données, généralement divisés en 3 composants : signe, exposant et mantisse. Ce format offre un équilibre entre précision et efficacité de stockage, ce qui le rend attrayant pour les applications nécessitant de la mémoire et de l'efficacité informatique.

En utilisant une représentation compacte des nombres, FP8 réduit les besoins en mémoire et accélère les calculs. De plus, FP8 peut être utile pour mettre en œuvre des opérations de bas niveau telles que des calculs arithmétiques et le traitement du signal.

Exemple : fonction issue de l'article Travailler avec des modèles ONNX aux formats float16 et float8

//+------------------------------------------------------------------+
//| RunCastFloat8Float                                               |
//+------------------------------------------------------------------+
bool RunCastFloat8ToFloat(long model_handle,const ENUM_FLOAT8_FORMAT fmt)
  {
   PrintFormat("TEST: %s(%s)",__FUNCTION__,EnumToString(fmt));
//---
   float test_data[15]   = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   uchar data_float8[15] = {};
   if(!ArrayToFP8(data_float8,test_data,fmt))
     {
      Print("error in ArrayToFP8. error code=",GetLastError());
      OnnxRelease(model_handle);
      return(false);
     }
   U<ucharinput_float8_values[3*5];
   U<floatoutput_float_values[3*5];
   float    test_data_float[];
//--- convert float8 to float
   if(!ArrayFromFP8(test_data_float,data_float8,fmt))
     {
      Print("error in ArrayFromFP8. error code=",GetLastError());
      OnnxRelease(model_handle);
      return(false);
     }
   for(uint i=0i<data_float8.Size(); i++)
     {
      input_float8_values[i].value=data_float8[i];
      PrintFormat("%d input value =%f  Hex float8 = %s  ushort value=%d",i,test_data_float[i],ArrayToHexString(input_float8_values[i].uc),input_float8_values[i].value);
     }
   Print("ONNX input array: ",ArrayToString(input_float8_values));
//--- execute model (convert float8 to float using ONNX)
   if(!OnnxRun(model_handle,ONNX_NO_CONVERSION,input_float8_values,output_float_values))
     {
      PrintFormat("error in OnnxRun. error code=%d",GetLastError());
      OnnxRelease(model_handle);
      return(false);
     }
   Print("ONNX output array: ",ArrayToString(output_float_values));
//--- calculate error (compare ONNX and ArrayFromFP8 results)
   double sum_error=0.0;
   for(uint i=0i<test_data.Size(); i++)
     {
      double delta=test_data_float[i]-(double)output_float_values[i].value;
      sum_error+=MathAbs(delta);
      PrintFormat("%d output float %f = %s difference=%f",i,output_float_values[i].value,ArrayToHexString(output_float_values[i].uc),delta);
     }
//---
   PrintFormat("%s(%s): sum_error=%f\n",__FUNCTION__,EnumToString(fmt),sum_error);
   return(true);
  }

Voir également

ArrayToFP8, ArrayCopy