I'm a newbie and I'm writing a program preform Pythagoras’ theorem but I cant work out the code to square a number.
If anyone out there knows it please help me.
Thanks
Printable View
I'm a newbie and I'm writing a program preform Pythagoras’ theorem but I cant work out the code to square a number.
If anyone out there knows it please help me.
Thanks
Ehh... I think it's in math.h header, and I think it was something like... sqroot(), but probably not, try searching "Square Root in C++" or something on Google ;)
It's sqrt for doubles, sqrtf for a double and sqrtl for a long double...
And they reside in the "cmath" header.
or for obvious reasons just use the ready sqrt() in math.h which handles double, long double and float http://www.cplusplus.com/reference/c...math/sqrt.htmlCode:template<class T)
class T mySqrt(T x, double precision)
{
if (x <= 0) return 0;
T r = x;
while (x - x/r > precision)
r = (r + x/r) / 2;
return r;
}
or...
which is far faster than calling the sqrt() functionCode:double Number;
__asm {
FLD Number
FSQRT Number
FSTP Number
}
I find the hypot() function useful. By the way, depending on what you are doing, its usually optimal to NOT square root your result and just always work with (x^2). It makes collision detection algorithms work oh so much faster.
both the functions are in cmath header file.
to find the squre root
to find the squareCode:cout<<sqrt(variable);
Code:cout<<pow(a,2);
Sorry, a little OOT. After some thorough browsing, I found this snippet:
FYI, it is Quake's inverse square root. But I sure can't understand it clearly. Especially the " i = 0x5f3759df - (i>>1);" part. I think it's much faster than the cmath's version.Code:float InvSqrt (float x)
{
float xhalf = 0.5f*x;
int i = *(int*)&x;
i = 0x5f3759df - (i>>1);
x = *(float*)&i;
x = x*(1.5f - xhalf*x*x);
return x;
}
EDIT: My mistake. You needed square and square root. Not inverse square root. :D
0x5F3759DFQuote:
But I sure can't understand it clearly. Especially the " i = 0x5f3759df - (i>>1);"
That was very insightful, and surprising to me.
Very interesting, Bob. Where on earth did you dig that up from?
From Chris Lomont's home page. Unfortunately, the link to his papers from his home page has some isues at times. So, I linked directly to the PDF.
And far less portable. Not to mention that, with the right switches (e.g. -ffast-math in GCC), your compiler might just optimize the sqrt call to the FSQRT instruction anyway. Which wouldn't break the compiler's register management code like the ASM snippet does. Or, in a loop, the compiler might parallelize a sqrt algorithm into a SIMD implementation with four times the throughput of the x87 (and a non-braindead architecture).