// 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() {}