Post Reply 
AriCalculator is a home made pocket calculator.
04-18-2019, 03:55 AM (This post was last modified: 04-18-2019 03:59 AM by Dan.)
Post: #67
RE: AriCalculator is a home made pocket calculator.
I ended up writing a double to string conversion function because of problems with "sprint" and "snprint" in Code Composer Studio. I used this algorithm.

Code:

void doubleToString(double x) {            
  unsigned char i = 0;
  unsigned char n = 2;
  double k = 0.0;
  double m = 1.0;
  unsigned char dinteger;

  for (i = 0; i < Exponent + 1; i++) {
    valueString[i] = 0;
  }

  if (x < 0.0) valueString[0] = 0x0C;
  else valueString[0] = 0x0B;

  x = fabs(x);

  xminus = predecessor(x);
  xplus = successor(x);

  l = (xminus + x)/2.0;
  u = (x + xplus)/2.0;

  while (u > pow(10.0,k)) {
    k += 1.0;
  }

  valueString[Exponent] = (unsigned char) k;

  W = x / pow(10.0,k - 1);

  d = floor(W);

  W = W - d;

  dinteger = (unsigned char) d;

  valueString[n] = dinteger;

  while (((d * pow(10.0,k - m)) <= l) && (((d + 1.0) * pow(10.0,k - m)) >= u)) {
    m += 1.0;
    n += 1;

    ddigit = floor(10.0 * W);

    W = 10.0 * W - ddigit;

    d = 10.0 * d + ddigit;

    dinteger = (unsigned char) ddigit;

    valueString[n] = dinteger;
  }

  if (((d * pow(10.0,k - m)) > l) && (((d + 1.0) * pow(10.0,k - m)) >= u)) {
  }                                                                  //no change to valueString[n]
  else {
    if (((d * pow(10.0,k - m)) <= l) && (((d + 1.0) * pow(10.0,k - m)) < u))
      valueString[n] = dinteger + 1;
    else {                                                          //return the value closest to x
      if (fabs(d * pow(10.0,k - m) - x) > fabs((d + 1.0) * pow(10.0,k - m) - x))
        valueString[n] = dinteger + 1;
    }
  }

  for (i = Exponent - 1; i > 1; i--) {
    if (valueString[i] == 0x0A) {
      valueString[i] = 0;
      valueString[i-1] += 1;
    }
  }
}
Find all posts by this user
Quote this message in a reply
Post Reply 


Messages In This Thread
RE: AriCalculator is a home made pocket calculator. - Dan - 04-18-2019 03:55 AM



User(s) browsing this thread: 2 Guest(s)