-C Fix\sharmless\ssigned/unsigned\scompiler\swarnings.
-D 2026-03-18T11:15:57.824
+C Simplification\sto\sthe\slogic\sthat\sdecides\swhether\sor\snot\san\sindex\nfield\smatches\swhen\sfloating\spoint\svalues\sare\sclose\sbut\snot\sexact.
+D 2026-03-18T12:36:01.646
F .fossil-settings/binary-glob 61195414528fb3ea9693577e1980230d78a1f8b0a54c78cf1b9b24d0a409ed6a x
F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
F src/vdbe.h 70e862ac8a11b590f8c1eaac17a0078429d42bc4ea3f757a9af0f451dd966a71
F src/vdbeInt.h f7157f110f88f1d9d8338c292faf23a9129f6712563ade2b408537c95e17bdef
F src/vdbeapi.c 6cdcbe5c7afa754c998e73d2d5d2805556268362914b952811bdfb9c78a37cf1
-F src/vdbeaux.c 6d5e722d0757be81229f3ceb3beae86cbc61c29578a36c3fac3e212c92b5ee58
+F src/vdbeaux.c d9856dfa383de2b0c9631c37453e2a628f91836092c21dc248f320f1ab1c30f5
F src/vdbeblob.c b3f0640db9642fbdc88bd6ebcc83d6009514cafc98f062f675f2c8d505d82692
F src/vdbemem.c 317ec5e870ddb16951b606c9fe8be22baef22ecbe46f58fdefc259662238afb7
F src/vdbesort.c b69220f4ea9ffea5fdef34d968c60305444eea909252a81933b54c296d9cca70
F tool/warnings.sh d924598cf2f55a4ecbc2aeb055c10bd5f48114793e7ba25f9585435da29e7e98
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
F tool/winmain.c 00c8fb88e365c9017db14c73d3c78af62194d9644feaf60e220ab0f411f3604c
-P 40c5966f7b784f181365c81fc559aee9463c374ee56677cf6e0aecaed39d2b28
-R 9f074cee19670ebd10ab4f9eba7bd14c
+P aa211fa1d49b6734913e957f9e4b9825709a1493d275f7dfaf9123dc8c7232dc
+R 4f3fe27634efc590d052577adbce04a9
U drh
-Z 5dcbd0ace5a3e67098d52e40f8108817
+Z 447592fe10f2c2a8e9592d7fbe83953e
# Remove this line to create a well-formed Fossil manifest.
}
}
-/*
-** Convert double value r to a 64-bit index such that real values separated
-** by a single ULP are adjacent (separated by 1 integer value).
-*/
-static i64 vdbeDoubleToIndex(double r){
- static const u64 signbit = ((u64)1 << 63);
- u64 u;
- assert( sizeof(u)==sizeof(r) );
- memcpy(&u, &r, sizeof(u));
- return (u & signbit) ? (i64)(signbit - u) : (i64)(signbit + u);
-}
-
/*
** Helper function for vdbeIsMatchingIndexKey(). Return true if column
** iCol should be ignored when comparing a record with a record from
** an index on disk. The field should be ignored if:
**
** * the corresponding bit in mask is set, and
-** * either bIntegrity is false, or
-** * the two Mem values are both real values that differ by
-** BTREE_ULPDISTORTION or fewer ULPs.
+** * either:
+** - bIntegrity is false, or
+** - the two Mem values are both real values that differ by
+** BTREE_ULPDISTORTION or fewer ULPs.
*/
static int vdbeSkipField(
Bitmask mask, /* Mask of indexed expression fields */
if( iCol>=BMS || (mask & MASKBIT(iCol))==0 ) return 0;
if( bIntegrity==0 ) return 1;
if( (pMem1->flags & MEM_Real) && (pMem2->flags & MEM_Real) ){
- i64 i1 = vdbeDoubleToIndex(pMem1->u.r);
- i64 i2 = vdbeDoubleToIndex(pMem2->u.r);
- if( ((i1<i2) ? (i2 - i1) : (i1 - i2))<=BTREE_ULPDISTORTION ){
+ u64 m1, m2;
+ memcpy(&m1,&pMem1->u.r,8);
+ memcpy(&m2,&pMem2->u.r,8);
+ if( (m1<m2 ? m2-m1 : m1-m2) <= BTREE_ULPDISTORTION ){
return 1;
}
}