fork(1) download
  1. #include <stdio.h>
  2. #include <stdint.h>
  3. #include <inttypes.h>
  4.  
  5. typedef int64_t i64;
  6. const i64 SMALLEST_INT64 = (((i64)(-1)) << 63);
  7. typedef long double LONGDOUBLE_TYPE;
  8.  
  9. int sqlite3IntFloatCompare1(i64 i, double r){
  10. /*if( sizeof(LONGDOUBLE_TYPE)>8 ){
  11.   LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i;
  12.   if( x<r ) return -1;
  13.   if( x>r ) return +1;
  14.   return 0;
  15.   }else{*/
  16. i64 y;
  17. double s;
  18. if( r<-9223372036854775808.0 ) return +1;
  19. if( r>9223372036854775807.0 ) return -1;
  20. y = (i64)r;
  21. if( i<y ) return -1;
  22. if( i>y ){
  23. if( y==SMALLEST_INT64 && r>0.0 ) return -1;
  24. return +1;
  25. }
  26. s = (double)i;
  27. if( s<r ) return -1;
  28. if( s>r ) return +1;
  29. return 0;
  30. //}
  31. }
  32.  
  33. int sqlite3IntFloatCompare2(i64 i, double r){
  34. /*if( sizeof(LONGDOUBLE_TYPE)>8 ){
  35.   LONGDOUBLE_TYPE x = (LONGDOUBLE_TYPE)i;
  36.   if( x<r ) return -1;
  37.   if( x>r ) return +1;
  38.   return 0;
  39.   }else{*/
  40. i64 y;
  41. double s;
  42. if( r<-9223372036854775808.0 ) return +1;
  43. if( r>=9223372036854775808.0 ) return -1;
  44. y = (i64)r;
  45. if( i<y ) return -1;
  46. if( i>y ) return +1;
  47. s = (double)i;
  48. if( s<r ) return -1;
  49. if( s>r ) return +1;
  50. return 0;
  51. //}
  52. }
  53.  
  54. int main()
  55. {
  56. const double td[12] = { 0.0, 0.25, 0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0,
  57. 9223372036854774784.0, 9223372036854775808.0, 9223372036854777856.0 };
  58. const int64_t ti[10] = { 0, 1, 2, 3, -1, -2, -3,
  59. 0x7FFFFFFFFFFFFFFF, SMALLEST_INT64, (SMALLEST_INT64 + 1) };
  60. for(int i = 0; i < 12; ++i)
  61. {
  62. for(int j = 0; j < 10; ++j)
  63. {
  64. const double dTa = td[i];
  65. const int64_t iT = ti[j];
  66. for(int k = 0; k < 2; ++k)
  67. {
  68. const double dT = (k ? -dTa : dTa);
  69. const int c1 = sqlite3IntFloatCompare1(iT, dT);
  70. const int c2 = sqlite3IntFloatCompare2(iT, dT);
  71. const int ok = (c1 == c2);
  72. printf("%" PRIi64 " <=> %f -> %d %d %s\n", iT, dT, c1, c2,
  73. (ok ? "OK" : "<==!ERROR!==>"));
  74. }
  75. }
  76. }
  77. return 0;
  78. }
  79.  
Success #stdin #stdout 0s 4384KB
stdin
Standard input is empty
stdout
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