|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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");
- }
复制代码
|
|