Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Improved rendering of LogEst values corresponding to real values near 0.0 in the tool/logest.c utility program. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | experimental-costs |
Files: | files | file ages | folders |
SHA1: |
32910c8c595858245bb7ecfe3aa0f90e |
User & Date: | drh 2014-04-30 14:22:38.579 |
Context
2014-04-30
| ||
14:47 | Fix a couple of out-of-date comments in where.c. (check-in: eefeda32d5 user: dan tags: experimental-costs) | |
14:22 | Improved rendering of LogEst values corresponding to real values near 0.0 in the tool/logest.c utility program. (check-in: 32910c8c59 user: drh tags: experimental-costs) | |
13:19 | Fix long-standing typos in comments. (check-in: b9f91317c3 user: drh tags: experimental-costs) | |
Changes
Changes to tool/logest.c.
︙ | ︙ | |||
79 80 81 82 83 84 85 | return (n+8)>>(3-x); } static LogEst logEstFromDouble(double x){ sqlite3_uint64 a; LogEst e; assert( sizeof(x)==8 && sizeof(a)==8 ); if( x<=0.0 ) return -32768; | | > | 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | return (n+8)>>(3-x); } static LogEst logEstFromDouble(double x){ sqlite3_uint64 a; LogEst e; assert( sizeof(x)==8 && sizeof(a)==8 ); if( x<=0.0 ) return -32768; if( x<0.01 ) return -logEstFromDouble(1.0/x); if( x<1.0 ) return logEstFromDouble(100.0*x) - 66; if( x<1024.0 ) return logEstFromInteger((sqlite3_uint64)(1024.0*x)) - 100; if( x<=2000000000.0 ) return logEstFromInteger((sqlite3_uint64)x); memcpy(&a, &x, 8); e = (a>>52) - 1022; return e*10; } |
︙ | ︙ | |||
152 153 154 155 156 157 158 | }else if( isFloat(z) && z[0]!='-' ){ a[n++] = logEstFromDouble(atof(z)); }else{ showHelp(argv[0]); } } for(i=n-1; i>=0; i--){ | | > > | 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 | }else if( isFloat(z) && z[0]!='-' ){ a[n++] = logEstFromDouble(atof(z)); }else{ showHelp(argv[0]); } } for(i=n-1; i>=0; i--){ if( a[i]<-40 ){ printf("%5d (%f)\n", a[i], 1.0/(double)logEstToInt(-a[i])); }else if( a[i]<10 ){ printf("%5d (%f)\n", a[i], logEstToInt(a[i]+100)/1024.0); }else{ sqlite3_uint64 x = logEstToInt(a[i]+100)*100/1024; printf("%5d (%lld.%02lld)\n", a[i], x/100, x%100); } } return 0; } |