// Second sketch for Arduino forum:
// https://forum.arduino.cc/t/complex-math-in-arduino/946934/32
// I accidently lost the first sketch.
//
// Is it possible to use BigNumber ?
// The answeris "Yes", but I'm sure that the conversion with round brackets is wrong.
// The output of this sketch is: 14
#include "BigNumber.h" // was #include <BigNumber.h>, but had to change it for Wokwi
// Posisi Matahari dan Bulan Low Accuracy Jean Meeus
BigNumber l = -6;
BigNumber b = 109;
BigNumber tgl = 13;
BigNumber bln = 6;
BigNumber thn = 2020;
BigNumber j = 1;
BigNumber mnt = 0;
BigNumber dtk = 0;
BigNumber zw = (b / BigNumber(15));
BigNumber M;
BigNumber Y;
BigNumber A;
BigNumber B;
BigNumber Tahun = thn + (bln - BigNumber(1.0)) / BigNumber(12.0) + tgl / BigNumber(365.0);
void setup()
{
Serial.begin(115200);
Serial.println();
Serial.println();
BigNumber::begin();
BigNumber JDU;
BigNumber JDE;
BigNumber T;
BigNumber JDUT;
BigNumber TuJD;
BigNumber GST_UT;
BigNumber GST_L;
BigNumber LST;
BigNumber delta;
if (bln < BigNumber(3))
{
M = bln + BigNumber(1);
Y = thn - BigNumber(1);
}
else
{
M = bln;
Y = thn;
}
A = (Y / BigNumber(100));
B = BigNumber(2) + BigNumber((int) (A / BigNumber(4))) - A;
if (Tahun > BigNumber(2005))
{
if(Tahun <= BigNumber(2050))
{
delta = BigNumber(62.92) +
BigNumber(0.32217) * (Tahun - BigNumber(2000.0)) +
BigNumber(0.005589) * (Tahun - BigNumber(2000.0)) * (Tahun - BigNumber(2000.0));
}
else
{
delta = BigNumber(0);
}
}
else
{
delta = BigNumber(0);
}
JDU = BigNumber(1720994.5) + \
BigNumber(int32_t(BigNumber(365.25) * Y)) + \
BigNumber(int32_t(BigNumber(30.60001) * (M + BigNumber(1)))) + \
B + tgl + (j + mnt / BigNumber(60) + dtk / BigNumber(3600)) / BigNumber(24) - \
zw / BigNumber(24);
JDE = JDU + (delta / BigNumber(86400));
T = (JDE - BigNumber(2451545)) / BigNumber(36525);
JDUT = BigNumber(1720994.5) + \
BigNumber(int32_t(BigNumber(365.25) * Y)) + \
BigNumber(int32_t(BigNumber(30.60001) * (M + BigNumber(1)))) + B + j;
TuJD = (JDUT - BigNumber(2451545)) / BigNumber(36525);
GST_UT = (BigNumber(6.6973745583) + BigNumber(2400.0513369072) * TuJD + \
BigNumber(0.0000258622) * TuJD * TuJD) % BigNumber(24);
GST_L = (GST_UT + (j + mnt / BigNumber(60) + \
dtk / BigNumber(3600)) * BigNumber(1.00273790935)) % BigNumber(24);
LST = (GST_L + b / BigNumber(15)) % BigNumber(24);
Serial.println(LST);
}
void loop() {}