马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Prentis 于 2015-5-16 21:48 编辑
看小甲鱼老师上课讲到,register寄存器可以大幅提高程序运行速度,这使我想到我前些天写的一个程序,万能解方程,可以解一元高次方程,算法很烂,所以运行很慢,用vs 2013会快一些但超十次的方程还是要好久好久(不知道是不是生成了64位程序),然而人家几何画板不管什么方程化为函数零点都是秒解的(高中生学习神器)。
那么问题来了,register仅仅支持整形吗?double就不能用吗,如果能用,这个程序的效率将会大大提高。附上程序源代码,vs 2013编译通过,运算精度不是很高。#include <math.h>
void main()
{
int max, m;
register i;
double e, x, n[99], sum;
printf("请输入方程最高次的次数:");
scanf_s("%d", &max);
sum = 0;
m = 0;
for (i = max; i>0; i--)
{
printf("请输入方程%d次项的系数:", i);
scanf_s("%lf", &n[i]);
}
printf("请输入方程的常数项:");
scanf_s("%lf", &n[0]);
printf("本程序将执行很多次运算,请耐心等待,这可能需要一些时间。\n");
for (x = -20; x<20; x = x + 0.0000001)
{
sum = 0;
for (i = 1; i <= max; i++)
{
e = pow(x, i);
sum = sum + n[i] * e;
}
sum = sum + n[0];
if ((sum >= -0.00001) && (sum <= 0.00001))
{
printf("x=%lf是方程的一个解。\n", x);
m++;
}
if (m == max)
{
break;
}
}
if (m == 0)
{
printf("该方程无实数解。\n");
}
system("pause");
}
|