Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 6703 in orxonox.OLD for branches


Ignore:
Timestamp:
Jan 25, 2006, 3:17:08 PM (19 years ago)
Author:
bwuest
Message:

converter.cc and converter.h changed: bug fix

Location:
branches/network/src/lib/network
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/network/src/lib/network/converter.cc

    r6634 r6703  
    8888 * @remarks: The int is stored in big-endian
    8989 * @param x: The int which is to convert
    90  * @return: A byte-array that accords the given int value
     90 * @return: The number of written bytes
    9191 */
    9292int Converter::intToByteArray(int x, byte* a, int length)
     
    124124 * Converts a byte-array into an int
    125125 * @param a: The byte-array which is to convert
    126  * @return: An int that accords the given byte-array
     126 * @param x: The place where the result is stored
     127 * @return: The number of read bytes
    127128 */
    128129int Converter::byteArrayToInt(const byte* a, int* x)
     
    150151/*!
    151152 * Converts a float into a string containing its binary representation
     153 * @param x: The float which is to convert
     154 * @return: A string containing the float's binary representation
    152155 */
    153156char* Converter::floatToBinString(float x)
     
    331334 * Converts a float value into a byte-array and stores the result into a given byte-array
    332335 * @param x: The float which is to convert
    333  * @return: A byte-array which accords the given float
     336 * @param a: The byte array where the result is to store
     337 * @param length: The length of the array a
     338 * @return: The number of written bytes
    334339 */
    335340int Converter::_floatToByteArray(float x, byte* a, int length)
     
    398403
    399404
    400     if (mantisse != 0)
    401     {
     405    //if (mantisse != 0)
     406    //{
    402407      while (mantisse < expmult)
    403408      {
     
    406411      }
    407412
    408       mantisse -= expmult;
    409     }
     413      if (exponent >= 0)
     414        mantisse -= expmult;
     415      else
     416      {
     417        //Denormalized
     418        while (exponent < 0)
     419        {
     420          mantisse /= 2;
     421          exponent++;
     422        }
     423        printf("Conv: Denorm");
     424      }
     425    //}
    410426  }
    411427
     
    414430
    415431  int hx = mantisse + expmult * exponent;
    416   int result = intToByteArray(hx, a, length);
     432  //int result = intToByteArray(hx, a, length);
     433  intToByteArray(hx, a, length);
    417434  if (sgn == -1)
    418435    a[3] += sgnadd;
     
    424441//    result[3] += sgnadd;
    425442
    426   return result;
     443  //return result;
     444  return FLOATSIZE;
    427445}
    428446
     
    431449 * Converts a byte-array into a float value
    432450 * @param a: The byte-array which is to convert
    433  * @return: A float value which accords the given byte-array
     451 * @param x: The place where the result is to store
     452 * @return: The number of read bytes
    434453 */
    435454int Converter::_byteArrayToFloat(const byte* a, float* x)
     
    459478    return FLOATSIZE;
    460479  }
    461 
    462   mantisse += expmult;
    463   exponent -= 128;
    464 
     480  else if (exponent == 0 && mantisse != 0)
     481  {
     482    exponent = -126;
     483    printf("ReConv: Denorm");
     484  }
     485  else
     486  {
     487    mantisse += expmult;
     488    exponent -= 128;
     489  }
    465490
    466491  int sgn;
     
    498523 * Converts a float value into a byte-array
    499524 * @param x: The float which is to convert
    500  * @return: A byte-array which accords the given float
     525 * @param a: The array where the result is to store
     526 * @param length: The length of the array a
     527 * @return: The number of written bytes
    501528 */
    502529int Converter::floatToByteArray(float x, byte* a, int length)
    503530{
    504   if ( length<4 )
     531  if ( length< FLOATSIZE )
    505532  {
    506533    PRINTF(1)("Byte Array to small\n");
     
    511538  for (int i = 0; i < 4; i++)
    512539    a[i] = p[i];
    513   return 4;
     540 
     541  return FLOATSIZE;
    514542}
    515543
     
    518546 * Converts a byte-array into a float value
    519547 * @param a: The byte-array which is to convert
    520  * @return: A float value which accords the given byte-array
     548 * @param x: The place where the result is to store
     549 * @return: The number of read bytes
    521550 */
    522551int Converter::byteArrayToFloat(const byte* a, float* x)
     
    524553  *x = *((float*)a);
    525554
    526   return 4;
    527 }
     555  return FLOATSIZE;
     556}
     557
     558
     559
     560
     561
     562
     563
     564
     565
    528566
    529567/**
     
    627665}
    628666
     667void Converter::ArrayfloatTest(float x)
     668{
     669  //float x = 8.0f;
     670  //float x = numeric_limits<float>::infinity();
     671
     672  printf("To Convert: %e\n", x);
     673  byte* res = new byte[4];
     674
     675  int wr = _floatToByteArray(x, res, 4);
     676  for (int i = 0; i < 4; i++)
     677    printf("%i ", res[i]);
     678  printf("  written bytes: %i \n", wr);
     679
     680  float y;
     681  int rd = _byteArrayToFloat(res, &y);
     682  printf("ReConvert: %e\n", y);
     683  printf("Read bytes: %i   ->  ", rd);
     684
     685  if (x == y)
     686    printf("equal\n");
     687  else
     688    printf("different\n");
     689}
     690
    629691void Converter::debug()
    630692{
    631693  printf("We rulez\n");
    632694
    633   //Denormalized?
    634   //floatTest(-9.87624e-38f);
    635   //floatTest(-9.87624e-37f);
    636   //floatTest(-9.87624e-36f);
    637   //floatTest(-9.87624e-35f);
    638 
    639   /*
    640   floatTest(14.7f);
    641   floatTest(12.07e15f);
    642   floatTest(0.0f);
    643   floatTest(5.67e-15f);
    644   */
     695  ArrayfloatTest(0.125f);
     696  ArrayfloatTest(64.0f);
     697  ArrayfloatTest(0.0f);
     698  ArrayfloatTest(5.00091e-29f);
    645699
    646700  //floatTest(-18.0098f);
     
    648702  //floatTest(-0.0f);
    649703  //floatTest(-5.67e-29f);
    650   floatTest(-45.7e-32f);
    651   floatTest(45.7e-33f);
    652   floatTest(-45.7e-34f);
    653   floatTest(45.7e-35f);
    654 }
     704 
     705 
     706  //floatTest(-45.7e-32f);
     707  //floatTest(45.7e-33f);
     708  //floatTest(-45.7e-34f);
     709  //floatTest(45.7e-35f);
     710}
  • branches/network/src/lib/network/converter.h

    r6634 r6703  
    5050    static void debug();
    5151    static void floatTest(float x);
     52    static void ArrayfloatTest(float x);
    5253    static float getDenormConst();
    5354
Note: See TracChangeset for help on using the changeset viewer.