BCB6. Funkcje Trunc i Round w jakim pliku?

0

W jakim pliku nagłówkowym znajdują się funkcje Round i Trunc w Borland C++ Builder 6? Jeśli one nie występują jak je zastąpić?

#include <???>

Chyba że jakiś inny sposób jest na nie...
Pilne ...
THX z Góry

0
int i;
float f=0.5;

i=f;  // trunc
i=f+0.5;  // round

O ile dla trunc nie warto wysilać sie nawet, to dla round mozesz sobie zdefiniowac makro:

#define round(a) int((a)+0.5)

// Do postu poniżej :
helper wszystko ładnie, ale klasyczne pascalowe round(-1.1)=-1 a round(-1.8)=-2 znaki nie mają tu nic wspólnego... Poniżej 0.5 zaokragla zawsze w doł (ale nie co do wartości bezwzględnej)

0

Można też tak:

inline float Trunc( float x ) 
{
   return static_cast<float>(static_cast<int>(x));
}

inline float Round( float x ) 
{
   x = (x < 0.0) ? x-0.5f : x+0.5f;
   return static_cast<float>(static_cast<int>(x));
}

lub o wiele wydajniej:

#include <cfloat>
inline float Trunc( float x ) 
{
   x = (x < 0.0) ? x+0.5f-FLT_EPSILON : x-0.5f+FLT_EPSILON;
   int i;
   _asm 
   {
      fld x
      fistp i
      fild i
      fstp x
   }
 return x;
}
inline float Round( float x ) 
{
   x = (x < 0.0f) ? x-FLT_EPSILON : x+FLT_EPSILON;
   int i;
   _asm 
   {
      fld x
      fistp i
      fild i
      fstp x
   }
  return x;
}
inline float RoundFast( float x ) 
{
   int i;
   _asm 
   {
      fld x
      fistp i
      fild i
      fstp x
   }
  return x;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1