From c733a4c7cce6816827f7bbd311c33963fa7c8ece Mon Sep 17 00:00:00 2001 From: drh Date: Wed, 12 Jun 2019 20:11:34 +0000 Subject: [PATCH] Enhancements to the printf() logic in order to render a negative zero with a minus sign. FossilOrigin-Name: 6ba4be66be90799ab0e1edc08c5c09bea239a85027ad0ca1f42818fc2580af4d --- manifest | 17 ++++++++++------- manifest.uuid | 2 +- src/printf.c | 9 ++++++++- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/manifest b/manifest index 77216e85fb..5474e7d888 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Handle\sexpressions\slike\s"expr\sIS\sTRUE\sCOLLATE\sxyz"\sin\sthe\ssame\sway\sas\s"expr\sIS\sTRUE".\sFix\sfor\s[4d01eda8115b10d1]. -D 2019-06-12T13:49:32.380 +C Enhancements\sto\sthe\sprintf()\slogic\sin\sorder\sto\srender\sa\snegative\szero\swith\na\sminus\ssign. +D 2019-06-12T20:11:34.026 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724 @@ -518,7 +518,7 @@ F src/pcache1.c be64b2f3908a7f97c56c963676eb12f0d6254c95b28cdc1d73a186eff213219d F src/pragma.c 925bcac0afd98a0d4255c7524b93239ab4d83893d96f7f8fdccd78d4929a39bb F src/pragma.h 4a9fabff14db4487a734dfeeb4be984ce662bfdccfae16145b9c732327735e13 F src/prepare.c 78027c6231fbb19ca186a5f5f0c0a1375d9c2cec0655273f9bd90d9ff74a34b3 -F src/printf.c 9be6945837c839ba57837b4bc3af349eba630920fa5532aa518816defe42a7d4 +F src/printf.c 05d4d769e0dba0bdb4f52255ab3c7ca0b500c5f08d28caced0cce0642ba60e87 F src/random.c 80f5d666f23feb3e6665a6ce04c7197212a88384 F src/resolve.c f71303e7202743e261b2fb885591b29d4bd826a7dc915745fa376fd1a3943f1a F src/rowset.c d977b011993aaea002cab3e0bb2ce50cf346000dff94e944d547b989f4b1fe93 @@ -1830,7 +1830,10 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0 -P 614ecb0af47038848e8ba2aed6b92db6f33ddc4aea6361795dbde440380f5a35 -R ff535e67a0f998f18172bd430f50d3e5 -U dan -Z 1b38c763ebe911ce5080403db6734d6a +P 5c6146b56a75a94f4baa10e95407c54dd0b9314a57a8702a4b96b15c4d7ac48c +R 32970911aa181195f7f2f26ab5229a78 +T *branch * negative-zero +T *sym-negative-zero * +T -sym-trunk * +U drh +Z c775e1b0e8bc7632b27bc5f73f887bcc diff --git a/manifest.uuid b/manifest.uuid index 0c39527915..21d4a08f87 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -5c6146b56a75a94f4baa10e95407c54dd0b9314a57a8702a4b96b15c4d7ac48c \ No newline at end of file +6ba4be66be90799ab0e1edc08c5c09bea239a85027ad0ca1f42818fc2580af4d \ No newline at end of file diff --git a/src/printf.c b/src/printf.c index fc77f68dff..193339d49a 100644 --- a/src/printf.c +++ b/src/printf.c @@ -105,6 +105,13 @@ static const double arRound[] = { 5.0e-06, 5.0e-07, 5.0e-08, 5.0e-09, 5.0e-10, }; +/* Return TRUE if a floating point number is negative, even a negative 0 */ +static int realIsNeg(double r){ + i64 x; + memcpy(&x,&r,sizeof(x)); + return x<0; +} + /* ** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point ** conversions will work. @@ -515,7 +522,7 @@ void sqlite3_str_vappendf( length = 0; #else if( precision<0 ) precision = 6; /* Set default precision */ - if( realvalue<0.0 ){ + if( realIsNeg(realvalue) ){ realvalue = -realvalue; prefix = '-'; }else{ -- 2.39.5