aboutsummaryrefslogtreecommitdiff
path: root/src/backend/utils/adt/float.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/utils/adt/float.c')
-rw-r--r--src/backend/utils/adt/float.c52
1 files changed, 6 insertions, 46 deletions
diff --git a/src/backend/utils/adt/float.c b/src/backend/utils/adt/float.c
index d1e12c14bed..c91bb1a3059 100644
--- a/src/backend/utils/adt/float.c
+++ b/src/backend/utils/adt/float.c
@@ -243,30 +243,10 @@ Datum
float4out(PG_FUNCTION_ARGS)
{
float4 num = PG_GETARG_FLOAT4(0);
- char *ascii;
-
- if (isnan(num))
- PG_RETURN_CSTRING(pstrdup("NaN"));
-
- switch (is_infinite(num))
- {
- case 1:
- ascii = pstrdup("Infinity");
- break;
- case -1:
- ascii = pstrdup("-Infinity");
- break;
- default:
- {
- int ndig = FLT_DIG + extra_float_digits;
-
- if (ndig < 1)
- ndig = 1;
-
- ascii = psprintf("%.*g", ndig, num);
- }
- }
+ char *ascii = (char *) palloc(32);
+ int ndig = FLT_DIG + extra_float_digits;
+ (void) pg_strfromd(ascii, 32, ndig, num);
PG_RETURN_CSTRING(ascii);
}
@@ -479,30 +459,10 @@ float8out(PG_FUNCTION_ARGS)
char *
float8out_internal(double num)
{
- char *ascii;
-
- if (isnan(num))
- return pstrdup("NaN");
-
- switch (is_infinite(num))
- {
- case 1:
- ascii = pstrdup("Infinity");
- break;
- case -1:
- ascii = pstrdup("-Infinity");
- break;
- default:
- {
- int ndig = DBL_DIG + extra_float_digits;
-
- if (ndig < 1)
- ndig = 1;
-
- ascii = psprintf("%.*g", ndig, num);
- }
- }
+ char *ascii = (char *) palloc(32);
+ int ndig = DBL_DIG + extra_float_digits;
+ (void) pg_strfromd(ascii, 32, ndig, num);
return ascii;
}