mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-12-15 08:20:16 +08:00
Use standard librart sqrt function in pg_stat_statements
The stddev calculation included a faster but unportable sqrt function. This is not worth the extra effort, and won't work everywhere. If the standard library function is good enough for the SQL function it should be good enough here too.
This commit is contained in:
parent
3a20b0e7b6
commit
cfe12763c3
@ -57,6 +57,7 @@
|
||||
*/
|
||||
#include "postgres.h"
|
||||
|
||||
#include <math.h>
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@ -326,7 +327,6 @@ static char *generate_normalized_query(pgssJumbleState *jstate, const char *quer
|
||||
int *query_len_p, int encoding);
|
||||
static void fill_in_constant_lengths(pgssJumbleState *jstate, const char *query);
|
||||
static int comp_location(const void *a, const void *b);
|
||||
static inline double sqrtd(const double x);
|
||||
|
||||
|
||||
/*
|
||||
@ -1583,7 +1583,7 @@ pg_stat_statements_internal(FunctionCallInfo fcinfo,
|
||||
*/
|
||||
if (tmp.calls > 1)
|
||||
values[i++] =
|
||||
Float8GetDatum(sqrtd(tmp.sum_var_time / tmp.calls));
|
||||
Float8GetDatum(sqrt(tmp.sum_var_time / tmp.calls));
|
||||
else
|
||||
values[i++] = Float8GetDatum(0.0);
|
||||
}
|
||||
@ -2968,20 +2968,3 @@ comp_location(const void *a, const void *b)
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* fast sqrt algorithm: reference from Fast inverse square root algorithms.
|
||||
*/
|
||||
static inline double
|
||||
sqrtd(const double x)
|
||||
{
|
||||
double x_half = 0.5 * x;
|
||||
long long int tmp = 0x5FE6EB50C7B537AAl - ( *(long long int*)&x >> 1);
|
||||
double x_result = * (double*)&tmp;
|
||||
|
||||
x_result *= (1.5 - (x_half * x_result * x_result));
|
||||
/* If retry this calculation, it becomes higher precision at sqrt */
|
||||
x_result *= (1.5 - (x_half * x_result * x_result));
|
||||
|
||||
return x_result * x;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user