void tojson(BYTE* buffer, int level, int isarray) { int i = 0; printf ((isarray) ? "[" : "{"); if (*buffer) { do { if (i>0) printf(","); printf ("\n"); addtabs(level); if (!isarray) { printf("\"%s\": ", getkey(buffer)); } switch (gettype(buffer)) { case BT_INT32BIT: printf("%d", asint(getvalue(buffer))); break; case BT_FLOP64BIT: printf("%lf", asdouble(getvalue(buffer))); break; case BT_BOOLFALSETRUE: printf("%s", (asboolean(getvalue(buffer)) ? "true" : "false")); break; case BT_UTF8STRING: printf("\"%s\"", asstring(getvalue(buffer))); break; case BT_EMBEDEDDOC: tojson(opendoc(getvalue(buffer), 0), level + 1, 0); break; case BT_ARRAY: tojson(opendoc(getvalue(buffer), 0), level + 1, 1); break; default: printf(" \"(0x%X) __NOTIMPLEMENTED__\"", gettype(buffer)); } i++; //getchar(); } while (*(buffer = nextitem(buffer))); printf ("\n"); addtabs(level - 1); } printf ((isarray) ? "]" : "}"); if (errorno) printf ("ERROR #%d\n", errorno); }
float __exp2f (float x) { uint32_t abstop; uint64_t ki, t; /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */ double_t kd, xd, z, r, r2, y, s; xd = (double_t) x; abstop = top12 (x) & 0x7ff; if (__glibc_unlikely (abstop >= top12 (128.0f))) { /* |x| >= 128 or x is nan. */ if (asuint (x) == asuint (-INFINITY)) return 0.0f; if (abstop >= top12 (INFINITY)) return x + x; if (x > 0.0f) return __math_oflowf (0); if (x <= -150.0f) return __math_uflowf (0); #if WANT_ERRNO_UFLOW if (x < -149.0f) return __math_may_uflowf (0); #endif } /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */ kd = math_narrow_eval ((double) (xd + SHIFT)); /* Needs to be double. */ ki = asuint64 (kd); kd -= SHIFT; /* k/N for int k. */ r = xd - kd; /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */ t = T[ki % N]; t += ki << (52 - EXP2F_TABLE_BITS); s = asdouble (t); z = C[0] * r + C[1]; r2 = r * r; y = C[2] * r + 1; y = z * r2 + y; y = y * s; return (float) y; }