Index: src/vdbeaux.c ================================================================== --- src/vdbeaux.c +++ src/vdbeaux.c @@ -3663,27 +3663,27 @@ /* If one value is a number and the other is not, the number is less. ** If both are numbers, compare as reals if one is a real, or as integers ** if both values are integers. */ if( combined_flags&(MEM_Int|MEM_Real) ){ - double r1, r2; + LONGDOUBLE_TYPE r1, r2; if( (f1 & f2 & MEM_Int)!=0 ){ if( pMem1->u.i < pMem2->u.i ) return -1; if( pMem1->u.i > pMem2->u.i ) return 1; return 0; } if( (f1&MEM_Real)!=0 ){ r1 = pMem1->u.r; }else if( (f1&MEM_Int)!=0 ){ - r1 = (double)pMem1->u.i; + r1 = (LONGDOUBLE_TYPE)pMem1->u.i; }else{ return 1; } if( (f2&MEM_Real)!=0 ){ r2 = pMem2->u.r; }else if( (f2&MEM_Int)!=0 ){ - r2 = (double)pMem2->u.i; + r2 = (LONGDOUBLE_TYPE)pMem2->u.i; }else{ return -1; } if( r1r2 ) return 1; @@ -3836,11 +3836,11 @@ if( serial_type>=10 ){ rc = +1; }else if( serial_type==0 ){ rc = -1; }else if( serial_type==7 ){ - double rhs = (double)pRhs->u.i; + LONGDOUBLE_TYPE rhs = (LONGDOUBLE_TYPE)pRhs->u.i; sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); if( mem1.u.rrhs ){ rc = +1; @@ -3866,17 +3866,17 @@ ** them to numberic values are. */ rc = +1; }else if( serial_type==0 ){ rc = -1; }else{ - double rhs = pRhs->u.r; - double lhs; + LONGDOUBLE_TYPE rhs = pRhs->u.r; + LONGDOUBLE_TYPE lhs; sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1); if( serial_type==7 ){ lhs = mem1.u.r; }else{ - lhs = (double)mem1.u.i; + lhs = (LONGDOUBLE_TYPE)mem1.u.i; } if( lhsrhs ){ rc = +1;