Exemple #1
0
char* DcmeDualModelDebugInfoStr(DcmeBookkeeping* b) {
  char* ddis = malloc(0x1000);
  real eem = NumVecMean(b->ent, K);
  real ees = NumVecStd(b->ent, K);
  sprintfc(ddis, 'g', 'k', "ENT:%.2e\u00b1%.2e", eem, ees);
  saprintf(ddis, " ");
  saprintf(ddis, "twps: %.3e zz: %02d", b->twps[b->last_updated_zz],
           b->last_updated_zz);
  if (NumIsNan(b->twps[b->last_updated_zz])) {
    saprintf(ddis, "NAN");
  } else {
    char* pb = strprogbarc(b->twps[b->last_updated_zz], 80, 0);
    saprintf(ddis, "%s", pb);
    free(pb);
  }
  return ddis;
}
Exemple #2
0
int NumToString (Number value, char* out)  {
	int i = 0, j = 0;
	byte halfmask, halfshift;
	Nybble* v = &value.MantissaLowest;

	char* p = out;

	if (NumIsOverflow(&value)) {
		*p++ = 'o';
		*p++ = 'F';
		*p++ = 'l';
		*p++ = 'o';
		*p++ = 'w';
		*p = '\0';
		return 6;
	}
	else if (NumIsUnderflow(&value)) {
		*p++ = 'u';
		*p++ = 'F';
		*p++ = 'l';
		*p++ = 'o';
		*p++ = 'w';
		*p = '\0';
		return 6;
	}
	else if (NumIsNan(&value)) {
		*p++ = 'N';
		*p++ = 'a';
		*p++ = 'N';
		*p = '\0';
		return 5;
	}
	else if (NumIsDiv0(&value)) {
		*p++ = 'D';
		*p++ = 'i';
		*p++ = 'v';
		*p++ = '/';
		*p++ = '0';
		*p = '\0';
		return 5;
	}

	if (NumIs0(&value)) {
		*p++ = '0';
		*p = 0;
		return 2;
	}

	if (NumIsNegative(&value)) {
		*p++ = '-';
		++j;
	}

	j = i = NumDigitCount(&value);
	if (i == value.Exponent) {
		*p++ = '0';
		*p++ = '.';
		j += 2;
	}

	for (--i, v += (i / 2), halfshift = (i & 1) * 4, halfmask = (0xF) << halfshift; i > -1; --i) {
		halfshift = (i & 1) * 4;
		*p++ = ((v->All & halfmask) >> halfshift) + 48;
		halfmask = ~halfmask;
		v -= (halfmask == 0xF0);
		if (i == value.Exponent && i != 0) {
			*p++ = '.';
			++j;
		}
	}

	*p = 0;
	 
	return j;
}