diff --git a/src/mtime_timedelta.c b/src/mtime_timedelta.c
index 9ca234856eccf410b1a45d72aa24b156418ff888..090897ea9496f69670aac2d8b73856636710f508 100644
--- a/src/mtime_timedelta.c
+++ b/src/mtime_timedelta.c
@@ -555,13 +555,11 @@ localTimeDeltaToJulianDelta_StandardTimeDelta_CalTypeGREGORIAN(struct _timedelta
 	      ndiny = NO_OF_DAYS_IN_A_YEAR_FOR_CAL_TYPE365;
 	    }
 
-	  int64_t i = 0L;
-
 	  /* Fast-Fwd >= 400 */
-          for (i = base_dt->date.year; ((base_dt->date.year + td->year - i) >= 400); i = i + 400)
-            {
-                  jd_return->day = jd_return->day + NO_OF_DAYS_IN_400_YEARS;
-            }
+	  int numberOf400YearPeriods = td->year / 400;
+	  int64_t i =  base_dt->date.year + numberOf400YearPeriods * 400;
+	  jd_return->day = jd_return->day + numberOf400YearPeriods * NO_OF_DAYS_IN_400_YEARS;
+
 
 	  /* The year from (target date - 399) to base_date + delta years - 1 */
 	  for (; i < base_dt->date.year + td->year; i++)
@@ -621,13 +619,10 @@ localTimeDeltaToJulianDelta_StandardTimeDelta_CalTypeGREGORIAN(struct _timedelta
 	      ndiny = NO_OF_DAYS_IN_A_YEAR_FOR_CAL_TYPE365;
 	    }
 
-	  int64_t i = 0L;
-
-           /* Fast-Fwd: >= 400 */
-          for (i = base_dt->date.year; (base_dt->date.year - td->year - i <= -400 ); i = i - 400)
-            {
-                  jd_return->day = jd_return->day - NO_OF_DAYS_IN_400_YEARS;
-            }
+	  /* Fast-Fwd >= 400 */
+	  int numberOf400YearPeriods = td->year / -400;
+	  int64_t i =  base_dt->date.year + numberOf400YearPeriods * -400;
+	  jd_return->day = jd_return->day - numberOf400YearPeriods * NO_OF_DAYS_IN_400_YEARS;
 
 
 	  /* The year from (target date + 399) to base_date - delta years + 1 */
@@ -806,14 +801,14 @@ julianDeltaToTimeDelta(struct _juliandelta* jd, struct _datetime* base_dt, struc
           /* Initialize to 0. */
           td_return->year = 0;
 
-		  /* Fast-Fwd: >= 400 */
-          while (days >= NO_OF_DAYS_IN_400_YEARS)
-            {
-                  td_return->year = td_return->year + 400;
-                  j = j + 400;
-                  days = days - NO_OF_DAYS_IN_400_YEARS;
-
-            };
+	  /* Fast-Fwd >= 400 */
+	  int numberOf400YearPeriods;
+	  if (numberOf400YearPeriods = days / NO_OF_DAYS_IN_400_YEARS)
+	  {
+	    td_return->year = td_return->year + numberOf400YearPeriods * 400;
+	    j = j + numberOf400YearPeriods * 400;
+	    days = days - numberOf400YearPeriods * NO_OF_DAYS_IN_400_YEARS;
+	  }
 
           do
             {
@@ -906,14 +901,14 @@ julianDeltaToTimeDelta(struct _juliandelta* jd, struct _datetime* base_dt, struc
           /* Initialize. */
           td_return->year = 0;
 
-	  /* Fast-Fwd: >= 400  */
-          while (days >= NO_OF_DAYS_IN_400_YEARS)
-            {
-                  td_return->year = td_return->year + 400;
-                  j = j - 400;
-                  days = days - NO_OF_DAYS_IN_400_YEARS;
-		
-            };
+	  /* Fast-Fwd >= 400 */
+          int numberOf400YearPeriods;
+	  if(numberOf400YearPeriods = days / NO_OF_DAYS_IN_400_YEARS)
+	  { 
+            td_return->year = td_return->year + numberOf400YearPeriods * 400;
+            j = j - numberOf400YearPeriods * 400;
+            days = days - numberOf400YearPeriods * NO_OF_DAYS_IN_400_YEARS;
+	  }
 
           do
             {