Index: timestamp.c
===================================================================
RCS file: /projects/cvsroot/pgsql/src/backend/utils/adt/timestamp.c,v
retrieving revision 1.140
diff -c -r1.140 timestamp.c
*** timestamp.c	22 Jul 2005 15:15:38 -0000	1.140
--- timestamp.c	22 Jul 2005 16:14:31 -0000
***************
*** 2294,2300 ****
--- 2294,2302 ----
  {
  	Interval   *span = PG_GETARG_INTERVAL_P(0);
  	float8		factor = PG_GETARG_FLOAT8(1);
+ #ifndef HAVE_INT64_TIMESTAMP
  	double		month_remainder, day_remainder;
+ #endif
  	Interval   *result;
  
  	result = (Interval *) palloc(sizeof(Interval));
***************
*** 2308,2313 ****
--- 2310,2322 ----
  	result->day = span->day / factor;
  	result->time = span->time / factor;
  
+ #ifdef HAVE_INT64_TIMESTAMP
+ 	/* Cascade fractions to lower units */
+ 	/* fractional months partial days into time */
+ 	result->time += ((span->day - (result->day * factor)) * USECS_PER_DAY) / factor;
+ 	/* fractional months full days into days */
+ 	result->day += ((span->month - (result->month * factor)) * DAYS_PER_MONTH) / factor;
+ #else
  	/* Computer remainders */
  	month_remainder = (span->month - result->month * factor) / factor;
  	day_remainder = (span->day - result->day * factor) / factor;
***************
*** 2317,2326 ****
  	result->day += month_remainder * DAYS_PER_MONTH;
  	/* fractional months partial days into time */
  	day_remainder += (month_remainder * DAYS_PER_MONTH) - (int)(month_remainder * DAYS_PER_MONTH);
- 
- #ifdef HAVE_INT64_TIMESTAMP
- 	result->time += day_remainder * USECS_PER_DAY;
- #else
  	result->time += day_remainder * SECS_PER_DAY;
  	result->time = JROUND(result->time);
  #endif
--- 2326,2331 ----
