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