- if(fmt & XTYPE_FMT_DBL_PREC) {
- uint prec = fmt & ~XTYPE_FMT_DBL_PREC;
- return mp_printf(pool, "%.*lf", prec, *(double *)src);
- }
-
- switch(fmt) {
- case XTYPE_FMT_RAW:
- return mp_printf(pool, "%.10lf", *(double *)src);
- case XTYPE_FMT_PRETTY:
- return mp_printf(pool, "%.2lf", *(double *)src);
- case XTYPE_FMT_DEFAULT:
- default:
- return mp_printf(pool, "%.5lf", *(double *)src);
- }
+ double val = *((double *)src);
+
+ if (fmt & XT_DOUBLE_FMT_PREC_FLAG)
+ {
+ uint prec = fmt & ~XT_DOUBLE_FMT_PREC_FLAG;
+ return mp_printf(pool, "%.*lf", prec, val);
+ }
+
+ switch(fmt)
+ {
+ case XTYPE_FMT_RAW:
+ return mp_printf(pool, "%.15lg", val);
+ case XTYPE_FMT_PRETTY:
+ return mp_printf(pool, "%.2lf", val);
+ case XTYPE_FMT_DEFAULT:
+ default:
+ return mp_printf(pool, "%.6lg", val);
+ }