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
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
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)
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;
}