1
0
mirror of https://github.com/sqlite/sqlite.git synced 2025-10-21 11:13:54 +03:00

Experiments with a new algorithm for converting ieee-754 binary64 numbers

into decimal.

FossilOrigin-Name: e923405e448385085224f9289991b303d86b02763535ea77d6fcee98ba6fc1f2
This commit is contained in:
drh
2023-06-30 18:35:43 +00:00
parent 24b368da8d
commit a1b0ff1735
5 changed files with 113 additions and 11 deletions

View File

@@ -2371,6 +2371,23 @@ static void signFunc(
sqlite3_result_int(context, x<0.0 ? -1 : x>0.0 ? +1 : 0);
}
#if 1 /* Temporary prototyping logic */
static void fpdecodeFunc(
sqlite3_context *context,
int argc,
sqlite3_value **argv
){
double r = sqlite3_value_double(argv[0]);
FpDecode s;
char zBuf[50];
UNUSED_PARAMETER(argc);
sqlite3FpDecode(&s, r);
sqlite3_snprintf(sizeof(zBuf), zBuf, "%c%.*s/%d", s.sign, s.n, s.z, s.iDP);
sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
}
#endif /* Temporary prototyping logic */
/*
** All of the FuncDef structures in the aBuiltinFunc[] array above
** to the global function hash table. This occurs at start-time (as
@@ -2442,6 +2459,11 @@ void sqlite3RegisterBuiltinFunctions(void){
FUNCTION(unicode, 1, 0, 0, unicodeFunc ),
FUNCTION(char, -1, 0, 0, charFunc ),
FUNCTION(abs, 1, 0, 0, absFunc ),
#if 1 /* Temporary prototyping function */
FUNCTION(fpdecode, 1, 0, 0, fpdecodeFunc ),
#endif
#ifndef SQLITE_OMIT_FLOATING_POINT
FUNCTION(round, 1, 0, 0, roundFunc ),
FUNCTION(round, 2, 0, 0, roundFunc ),