Index: base/third_party/dmg_fp/g_fmt.cc |
diff --git a/base/third_party/dmg_fp/g_fmt.cc b/base/third_party/dmg_fp/g_fmt.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..c746ca6b0efd1fdcca82f2fedb1e00171e170bfa |
--- /dev/null |
+++ b/base/third_party/dmg_fp/g_fmt.cc |
@@ -0,0 +1,100 @@ |
+/**************************************************************** |
+ * |
+ * The author of this software is David M. Gay. |
+ * |
+ * Copyright (c) 1991, 1996 by Lucent Technologies. |
+ * |
+ * Permission to use, copy, modify, and distribute this software for any |
+ * purpose without fee is hereby granted, provided that this entire notice |
+ * is included in all copies of any software which is or includes a copy |
+ * or modification of this software and in all copies of the supporting |
+ * documentation for such software. |
+ * |
+ * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED |
+ * WARRANTY. IN PARTICULAR, NEITHER THE AUTHOR NOR LUCENT MAKES ANY |
+ * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY |
+ * OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE. |
+ * |
+ ***************************************************************/ |
+ |
+/* g_fmt(buf,x) stores the closest decimal approximation to x in buf; |
+ * it suffices to declare buf |
+ * char buf[32]; |
+ */ |
+ |
+#include "dmg_fp.h" |
+ |
+namespace dmg_fp { |
+ |
+ char * |
+g_fmt(register char *b, double x) |
+{ |
+ register int i, k; |
+ register char *s; |
+ int decpt, j, sign; |
+ char *b0, *s0, *se; |
+ |
+ b0 = b; |
+#ifdef IGNORE_ZERO_SIGN |
+ if (!x) { |
+ *b++ = '0'; |
+ *b = 0; |
+ goto done; |
+ } |
+#endif |
+ s = s0 = dtoa(x, 0, 0, &decpt, &sign, &se); |
+ if (sign) |
+ *b++ = '-'; |
+ if (decpt == 9999) /* Infinity or Nan */ { |
+ while(*b++ = *s++); |
+ goto done0; |
+ } |
+ if (decpt <= -4 || decpt > se - s + 5) { |
+ *b++ = *s++; |
+ if (*s) { |
+ *b++ = '.'; |
+ while(*b = *s++) |
+ b++; |
+ } |
+ *b++ = 'e'; |
+ /* sprintf(b, "%+.2d", decpt - 1); */ |
+ if (--decpt < 0) { |
+ *b++ = '-'; |
+ decpt = -decpt; |
+ } |
+ else |
+ *b++ = '+'; |
+ for(j = 2, k = 10; 10*k <= decpt; j++, k *= 10); |
+ for(;;) { |
+ i = decpt / k; |
+ *b++ = i + '0'; |
+ if (--j <= 0) |
+ break; |
+ decpt -= i*k; |
+ decpt *= 10; |
+ } |
+ *b = 0; |
+ } |
+ else if (decpt <= 0) { |
+ *b++ = '.'; |
+ for(; decpt < 0; decpt++) |
+ *b++ = '0'; |
+ while(*b++ = *s++); |
+ } |
+ else { |
+ while(*b = *s++) { |
+ b++; |
+ if (--decpt == 0 && *s) |
+ *b++ = '.'; |
+ } |
+ for(; decpt > 0; decpt--) |
+ *b++ = '0'; |
+ *b = 0; |
+ } |
+ done0: |
+ freedtoa(s0); |
+ done: |
+ return b0; |
+ } |
+ |
+} // namespace dmg_fp |