70,023
社区成员




#include <iostream>
#include <cmath>
using namespace std;
void MY_sqrt(double src , double & dst , double eps);
int main()
{
double src , dst , eps;
cout<<"Input the src = ";
cin>>src;
cout<<"Input the eps = ";
cin>>eps;
MY_sqrt(src , dst , eps);
cout<<"Sqrt of "<<src<<" is "<<dst<<endl;
system("pause");
}
void MY_sqrt(double src , double & dst , double eps)
{
double x = src / 2;
double y = x * x - src;
while(abs(y)>eps)
{
x -= y / (2 * x);
y = x * x - src;
}
dst = x;
}
__declspec(naked) float FastSqrt(float x) /*快速平方根,最大误差%6,原理是利用泰勒级数展开取一次项*/
{
__asm
{
SUB ESP, 4
MOV EAX, [ESP]+8
SUB EAX, 0x3F800000
SAR EAX, 1
ADD EAX, 0x3F800000
MOV [ESP], EAX
FLD DWORD PTR [ESP]
ADD ESP, 4
RET
}
}