您的位置:首页 > 编程语言 > C语言/C++

牛顿迭代法 求根号C C语言和汇编语言实现

2010-06-03 00:07 465 查看
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<stdlib.h>
//xn=(xn+c/xn)/2;
//迭代的精度满足|x(n+1)-x(n)|<forcom.停止计算.
main(){
float c,xn,xn1,temp,forDiv,temp2;
double forCom;
short int mem;

xn=1.0;//迭代初始值
xn1=0.0;
temp=1.0;
forDiv=2.0;
forCom=0.00001;

printf("请输入一个正数:/n");
scanf("%f",&c);

_asm{
newton:
FLD xn//将xn压栈
FST temp//将栈顶元素,即xn传给temp,栈顶不弹出
FLD c//将变量c压栈
FDIV ST(0),ST(1)// c/xn 赋给 st(0)
FADD ST(0),ST(1)//c/xn + xn 赋给 st(0)
FLD forDiv//将fordiv压栈
FDIV ST(1),ST(0)//(c/xn + xn)/fordiv 赋给 st(1)
FXCH//交换st(0)和st(1)
FST xn1//将栈顶元素,传给xn1,栈顶不弹出
FSTP xn//将栈顶元素弹出赋给xn
FLD temp//变量temp压栈
FLD xn1//变量xn1压栈
FSUB ST(0),ST(1)//st(0)-st(1)结果赋给st(0)

FABS//求st(0)绝对值
FCOM forCom//实数比较 将标志位设置为 st(0) - forCom的结果标志位

FSTSW mem//保存状态字的值到mem
MOV AX,mem//保存状态字的值到AX
SAHF//SAHF 将AH 寄存器内容送FLAGS 的低字节
//以下将所有数出栈
FSTP temp2
FSTP temp2
FSTP temp2
FSTP temp2
JA newton//状态字大于0继续迭代
ending:
}

printf("开平方后的结果为:%e/n",xn);

return 0;
}


实现牛顿迭代法 求根号C C语言和汇编语言实现
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: