#include <stdio.h> #include <stdint.h> #include <inttypes.h> typedef int64_t i64; const i64 SMALLEST_INT64 = (((i64)(-1)) << 63); typedef long double LONGDOUBLE_TYPE; int sqlite3IntFloatCompare1(i64 i, double r){ /*if( sizeof(LONGDOUBLE_TYPE)>8 ){ LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i; if( x<r ) return -1; if( x>r ) return +1; return 0; }else{*/ i64 y; double s; if( r<-9223372036854775808.0 ) return +1; if( r>9223372036854775807.0 ) return -1; y = (i64)r; if( i<y ) return -1; if( i>y ){ if( y==SMALLEST_INT64 && r>0.0 ) return -1; return +1; } s = (double)i; if( s<r ) return -1; if( s>r ) return +1; return 0; //} } int sqlite3IntFloatCompare2(i64 i, double r){ /*if( sizeof(LONGDOUBLE_TYPE)>8 ){ LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i; if( x<r ) return -1; if( x>r ) return +1; return 0; }else{*/ i64 y; double s; if( r<-9223372036854775808.0 ) return +1; if( r>=9223372036854775808.0 ) return -1; y = (i64)r; if( i<y ) return -1; if( i>y ) return +1; s = (double)i; if( s<r ) return -1; if( s>r ) return +1; return 0; //} } int main() { const double td[12] = { 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 9223372036854774784.0, 9223372036854775808.0, 9223372036854777856.0 }; const int64_t ti[10] = { 0, 1, 2, 3, -1, -2, -3, 0x7FFFFFFFFFFFFFFF, SMALLEST_INT64, (SMALLEST_INT64 + 1) }; for(int i = 0; i < 12; ++i) { for(int j = 0; j < 10; ++j) { const double dTa = td[i]; const int64_t iT = ti[j]; for(int k = 0; k < 2; ++k) { const double dT = (k ? -dTa : dTa); const int c1 = sqlite3IntFloatCompare1(iT, dT); const int c2 = sqlite3IntFloatCompare2(iT, dT); const int ok = (c1 == c2); (ok ? "OK" : "<==!ERROR!==>")); } } } return 0; }
Standard input is empty
0 <=> 0.000000 -> 0 0 OK 0 <=> -0.000000 -> 0 0 OK 1 <=> 0.000000 -> 1 1 OK 1 <=> -0.000000 -> 1 1 OK 2 <=> 0.000000 -> 1 1 OK 2 <=> -0.000000 -> 1 1 OK 3 <=> 0.000000 -> 1 1 OK 3 <=> -0.000000 -> 1 1 OK -1 <=> 0.000000 -> -1 -1 OK -1 <=> -0.000000 -> -1 -1 OK -2 <=> 0.000000 -> -1 -1 OK -2 <=> -0.000000 -> -1 -1 OK -3 <=> 0.000000 -> -1 -1 OK -3 <=> -0.000000 -> -1 -1 OK 9223372036854775807 <=> 0.000000 -> 1 1 OK 9223372036854775807 <=> -0.000000 -> 1 1 OK -9223372036854775808 <=> 0.000000 -> -1 -1 OK -9223372036854775808 <=> -0.000000 -> -1 -1 OK -9223372036854775807 <=> 0.000000 -> -1 -1 OK -9223372036854775807 <=> -0.000000 -> -1 -1 OK 0 <=> 0.250000 -> -1 -1 OK 0 <=> -0.250000 -> 1 1 OK 1 <=> 0.250000 -> 1 1 OK 1 <=> -0.250000 -> 1 1 OK 2 <=> 0.250000 -> 1 1 OK 2 <=> -0.250000 -> 1 1 OK 3 <=> 0.250000 -> 1 1 OK 3 <=> -0.250000 -> 1 1 OK -1 <=> 0.250000 -> -1 -1 OK -1 <=> -0.250000 -> -1 -1 OK -2 <=> 0.250000 -> -1 -1 OK -2 <=> -0.250000 -> -1 -1 OK -3 <=> 0.250000 -> -1 -1 OK -3 <=> -0.250000 -> -1 -1 OK 9223372036854775807 <=> 0.250000 -> 1 1 OK 9223372036854775807 <=> -0.250000 -> 1 1 OK -9223372036854775808 <=> 0.250000 -> -1 -1 OK -9223372036854775808 <=> -0.250000 -> -1 -1 OK -9223372036854775807 <=> 0.250000 -> -1 -1 OK -9223372036854775807 <=> -0.250000 -> -1 -1 OK 0 <=> 0.500000 -> -1 -1 OK 0 <=> -0.500000 -> 1 1 OK 1 <=> 0.500000 -> 1 1 OK 1 <=> -0.500000 -> 1 1 OK 2 <=> 0.500000 -> 1 1 OK 2 <=> -0.500000 -> 1 1 OK 3 <=> 0.500000 -> 1 1 OK 3 <=> -0.500000 -> 1 1 OK -1 <=> 0.500000 -> -1 -1 OK -1 <=> -0.500000 -> -1 -1 OK -2 <=> 0.500000 -> -1 -1 OK -2 <=> -0.500000 -> -1 -1 OK -3 <=> 0.500000 -> -1 -1 OK -3 <=> -0.500000 -> -1 -1 OK 9223372036854775807 <=> 0.500000 -> 1 1 OK 9223372036854775807 <=> -0.500000 -> 1 1 OK -9223372036854775808 <=> 0.500000 -> -1 -1 OK -9223372036854775808 <=> -0.500000 -> -1 -1 OK -9223372036854775807 <=> 0.500000 -> -1 -1 OK -9223372036854775807 <=> -0.500000 -> -1 -1 OK 0 <=> 0.750000 -> -1 -1 OK 0 <=> -0.750000 -> 1 1 OK 1 <=> 0.750000 -> 1 1 OK 1 <=> -0.750000 -> 1 1 OK 2 <=> 0.750000 -> 1 1 OK 2 <=> -0.750000 -> 1 1 OK 3 <=> 0.750000 -> 1 1 OK 3 <=> -0.750000 -> 1 1 OK -1 <=> 0.750000 -> -1 -1 OK -1 <=> -0.750000 -> -1 -1 OK -2 <=> 0.750000 -> -1 -1 OK -2 <=> -0.750000 -> -1 -1 OK -3 <=> 0.750000 -> -1 -1 OK -3 <=> -0.750000 -> -1 -1 OK 9223372036854775807 <=> 0.750000 -> 1 1 OK 9223372036854775807 <=> -0.750000 -> 1 1 OK -9223372036854775808 <=> 0.750000 -> -1 -1 OK -9223372036854775808 <=> -0.750000 -> -1 -1 OK -9223372036854775807 <=> 0.750000 -> -1 -1 OK -9223372036854775807 <=> -0.750000 -> -1 -1 OK 0 <=> 1.000000 -> -1 -1 OK 0 <=> -1.000000 -> 1 1 OK 1 <=> 1.000000 -> 0 0 OK 1 <=> -1.000000 -> 1 1 OK 2 <=> 1.000000 -> 1 1 OK 2 <=> -1.000000 -> 1 1 OK 3 <=> 1.000000 -> 1 1 OK 3 <=> -1.000000 -> 1 1 OK -1 <=> 1.000000 -> -1 -1 OK -1 <=> -1.000000 -> 0 0 OK -2 <=> 1.000000 -> -1 -1 OK -2 <=> -1.000000 -> -1 -1 OK -3 <=> 1.000000 -> -1 -1 OK -3 <=> -1.000000 -> -1 -1 OK 9223372036854775807 <=> 1.000000 -> 1 1 OK 9223372036854775807 <=> -1.000000 -> 1 1 OK -9223372036854775808 <=> 1.000000 -> -1 -1 OK -9223372036854775808 <=> -1.000000 -> -1 -1 OK -9223372036854775807 <=> 1.000000 -> -1 -1 OK -9223372036854775807 <=> -1.000000 -> -1 -1 OK 0 <=> 1.250000 -> -1 -1 OK 0 <=> -1.250000 -> 1 1 OK 1 <=> 1.250000 -> -1 -1 OK 1 <=> -1.250000 -> 1 1 OK 2 <=> 1.250000 -> 1 1 OK 2 <=> -1.250000 -> 1 1 OK 3 <=> 1.250000 -> 1 1 OK 3 <=> -1.250000 -> 1 1 OK -1 <=> 1.250000 -> -1 -1 OK -1 <=> -1.250000 -> 1 1 OK -2 <=> 1.250000 -> -1 -1 OK -2 <=> -1.250000 -> -1 -1 OK -3 <=> 1.250000 -> -1 -1 OK -3 <=> -1.250000 -> -1 -1 OK 9223372036854775807 <=> 1.250000 -> 1 1 OK 9223372036854775807 <=> -1.250000 -> 1 1 OK -9223372036854775808 <=> 1.250000 -> -1 -1 OK -9223372036854775808 <=> -1.250000 -> -1 -1 OK -9223372036854775807 <=> 1.250000 -> -1 -1 OK -9223372036854775807 <=> -1.250000 -> -1 -1 OK 0 <=> 1.500000 -> -1 -1 OK 0 <=> -1.500000 -> 1 1 OK 1 <=> 1.500000 -> -1 -1 OK 1 <=> -1.500000 -> 1 1 OK 2 <=> 1.500000 -> 1 1 OK 2 <=> -1.500000 -> 1 1 OK 3 <=> 1.500000 -> 1 1 OK 3 <=> -1.500000 -> 1 1 OK -1 <=> 1.500000 -> -1 -1 OK -1 <=> -1.500000 -> 1 1 OK -2 <=> 1.500000 -> -1 -1 OK -2 <=> -1.500000 -> -1 -1 OK -3 <=> 1.500000 -> -1 -1 OK -3 <=> -1.500000 -> -1 -1 OK 9223372036854775807 <=> 1.500000 -> 1 1 OK 9223372036854775807 <=> -1.500000 -> 1 1 OK -9223372036854775808 <=> 1.500000 -> -1 -1 OK -9223372036854775808 <=> -1.500000 -> -1 -1 OK -9223372036854775807 <=> 1.500000 -> -1 -1 OK -9223372036854775807 <=> -1.500000 -> -1 -1 OK 0 <=> 1.750000 -> -1 -1 OK 0 <=> -1.750000 -> 1 1 OK 1 <=> 1.750000 -> -1 -1 OK 1 <=> -1.750000 -> 1 1 OK 2 <=> 1.750000 -> 1 1 OK 2 <=> -1.750000 -> 1 1 OK 3 <=> 1.750000 -> 1 1 OK 3 <=> -1.750000 -> 1 1 OK -1 <=> 1.750000 -> -1 -1 OK -1 <=> -1.750000 -> 1 1 OK -2 <=> 1.750000 -> -1 -1 OK -2 <=> -1.750000 -> -1 -1 OK -3 <=> 1.750000 -> -1 -1 OK -3 <=> -1.750000 -> -1 -1 OK 9223372036854775807 <=> 1.750000 -> 1 1 OK 9223372036854775807 <=> -1.750000 -> 1 1 OK -9223372036854775808 <=> 1.750000 -> -1 -1 OK -9223372036854775808 <=> -1.750000 -> -1 -1 OK -9223372036854775807 <=> 1.750000 -> -1 -1 OK -9223372036854775807 <=> -1.750000 -> -1 -1 OK 0 <=> 2.000000 -> -1 -1 OK 0 <=> -2.000000 -> 1 1 OK 1 <=> 2.000000 -> -1 -1 OK 1 <=> -2.000000 -> 1 1 OK 2 <=> 2.000000 -> 0 0 OK 2 <=> -2.000000 -> 1 1 OK 3 <=> 2.000000 -> 1 1 OK 3 <=> -2.000000 -> 1 1 OK -1 <=> 2.000000 -> -1 -1 OK -1 <=> -2.000000 -> 1 1 OK -2 <=> 2.000000 -> -1 -1 OK -2 <=> -2.000000 -> 0 0 OK -3 <=> 2.000000 -> -1 -1 OK -3 <=> -2.000000 -> -1 -1 OK 9223372036854775807 <=> 2.000000 -> 1 1 OK 9223372036854775807 <=> -2.000000 -> 1 1 OK -9223372036854775808 <=> 2.000000 -> -1 -1 OK -9223372036854775808 <=> -2.000000 -> -1 -1 OK -9223372036854775807 <=> 2.000000 -> -1 -1 OK -9223372036854775807 <=> -2.000000 -> -1 -1 OK 0 <=> 9223372036854774784.000000 -> -1 -1 OK 0 <=> -9223372036854774784.000000 -> 1 1 OK 1 <=> 9223372036854774784.000000 -> -1 -1 OK 1 <=> -9223372036854774784.000000 -> 1 1 OK 2 <=> 9223372036854774784.000000 -> -1 -1 OK 2 <=> -9223372036854774784.000000 -> 1 1 OK 3 <=> 9223372036854774784.000000 -> -1 -1 OK 3 <=> -9223372036854774784.000000 -> 1 1 OK -1 <=> 9223372036854774784.000000 -> -1 -1 OK -1 <=> -9223372036854774784.000000 -> 1 1 OK -2 <=> 9223372036854774784.000000 -> -1 -1 OK -2 <=> -9223372036854774784.000000 -> 1 1 OK -3 <=> 9223372036854774784.000000 -> -1 -1 OK -3 <=> -9223372036854774784.000000 -> 1 1 OK 9223372036854775807 <=> 9223372036854774784.000000 -> 1 1 OK 9223372036854775807 <=> -9223372036854774784.000000 -> 1 1 OK -9223372036854775808 <=> 9223372036854774784.000000 -> -1 -1 OK -9223372036854775808 <=> -9223372036854774784.000000 -> -1 -1 OK -9223372036854775807 <=> 9223372036854774784.000000 -> -1 -1 OK -9223372036854775807 <=> -9223372036854774784.000000 -> -1 -1 OK 0 <=> 9223372036854775808.000000 -> -1 -1 OK 0 <=> -9223372036854775808.000000 -> 1 1 OK 1 <=> 9223372036854775808.000000 -> -1 -1 OK 1 <=> -9223372036854775808.000000 -> 1 1 OK 2 <=> 9223372036854775808.000000 -> -1 -1 OK 2 <=> -9223372036854775808.000000 -> 1 1 OK 3 <=> 9223372036854775808.000000 -> -1 -1 OK 3 <=> -9223372036854775808.000000 -> 1 1 OK -1 <=> 9223372036854775808.000000 -> -1 -1 OK -1 <=> -9223372036854775808.000000 -> 1 1 OK -2 <=> 9223372036854775808.000000 -> -1 -1 OK -2 <=> -9223372036854775808.000000 -> 1 1 OK -3 <=> 9223372036854775808.000000 -> -1 -1 OK -3 <=> -9223372036854775808.000000 -> 1 1 OK 9223372036854775807 <=> 9223372036854775808.000000 -> -1 -1 OK 9223372036854775807 <=> -9223372036854775808.000000 -> 1 1 OK -9223372036854775808 <=> 9223372036854775808.000000 -> -1 -1 OK -9223372036854775808 <=> -9223372036854775808.000000 -> 0 0 OK -9223372036854775807 <=> 9223372036854775808.000000 -> -1 -1 OK -9223372036854775807 <=> -9223372036854775808.000000 -> 1 1 OK 0 <=> 9223372036854777856.000000 -> -1 -1 OK 0 <=> -9223372036854777856.000000 -> 1 1 OK 1 <=> 9223372036854777856.000000 -> -1 -1 OK 1 <=> -9223372036854777856.000000 -> 1 1 OK 2 <=> 9223372036854777856.000000 -> -1 -1 OK 2 <=> -9223372036854777856.000000 -> 1 1 OK 3 <=> 9223372036854777856.000000 -> -1 -1 OK 3 <=> -9223372036854777856.000000 -> 1 1 OK -1 <=> 9223372036854777856.000000 -> -1 -1 OK -1 <=> -9223372036854777856.000000 -> 1 1 OK -2 <=> 9223372036854777856.000000 -> -1 -1 OK -2 <=> -9223372036854777856.000000 -> 1 1 OK -3 <=> 9223372036854777856.000000 -> -1 -1 OK -3 <=> -9223372036854777856.000000 -> 1 1 OK 9223372036854775807 <=> 9223372036854777856.000000 -> -1 -1 OK 9223372036854775807 <=> -9223372036854777856.000000 -> 1 1 OK -9223372036854775808 <=> 9223372036854777856.000000 -> -1 -1 OK -9223372036854775808 <=> -9223372036854777856.000000 -> 1 1 OK -9223372036854775807 <=> 9223372036854777856.000000 -> -1 -1 OK -9223372036854775807 <=> -9223372036854777856.000000 -> 1 1 OK