// For: https://forum.arduino.cc/t/double-precision-operations/1066161
//
// Using the BigNumber library:
//   https://github.com/nickgammon/BigNumber
//


// #include <BigNumber.h>       // For a normal Arduino project
#include "BigNumber.h"          // For Wokwi simulation

void setup() {

  Serial.begin(115200);

  BigNumber::begin(30);

  BigNumber W[3] = {"0", "0", "0"};
  BigNumber WN[3] = {"0", "0", "0"};
  BigNumber DW[8][3] = 
  {
    {"1.656", "4", "11"}, 
    {"2.4", "5", "4"}, 
    {"3.54", "7", "8"}, 
    {"4.64", "44", "8"}, 
    {"0", "0", "0"}, 
    {"0", "0", "0"}, 
    {"0", "0", "0"}, 
    {"0", "0", "0"}
  };
  BigNumber DATAX[4] = {"1.656", "2.4", "3.54", "4.64"};
  BigNumber DATAY[4] = {"4", "5", "7", "44"};
  BigNumber DATAZ[4] = {"11", "4", "8", "8"};


  for (int i = 0; i < 4 ; i++) {
    WN[2] = W[2] + (WN[0] * DATAY[i]) - (WN[1] * DATAX[i]) + DW[i][2];
    WN[1] = W[1] + (WN[2] * DATAX[i]) - (WN[0] * DATAZ[i]) + DW[i][1];
    WN[0] = W[0] + (WN[1] * DATAZ[i]) - (WN[2] * DATAY[i]) + DW[i][0];
    W[0] = WN[0]; W[1] = WN[1]; W[2] = WN[2];
  }

  Serial.println(W[0]);
  Serial.println(W[1]);
  Serial.println(W[2]);
}

void loop() {}