新手困在了求二元一次方程根的编程上,求指导。

软件和网站开发以及相关技术探讨
回复
yhyhwl
帖子: 3
注册时间: 2012-12-27 19:50
系统: ubuntu

新手困在了求二元一次方程根的编程上,求指导。

#1

帖子 yhyhwl » 2012-12-27 19:54

代码: 全选

#include<stdio.h>
#include<math.h>
int main()
{ 
int a,b,c;
float x1,x2,q,p;
scanf("a=%d,b=%d,c=%d",&a,&b,&c);
p=-b/(2*a);
q=sqrt(b*b-4*a*c)/(2*a);
x1=p+q;
x2=p-q;
printf("x1=%5.2f x2=%5.2f\n",x1,x2);
return 0;
}
如果
int a,b,c;
float x1,x2,q,p;
改成 float x1,x2,q,p,a,b,c;就对了,为什么呢? :em06
bluebirdshao
帖子: 186
注册时间: 2007-11-26 12:05

Re: 新手困在了求二元一次方程根的编程上,求指导。

#2

帖子 bluebirdshao » 2012-12-27 20:29

如果你将

p=-b/(2*a);
q=sqrt(b*b-4*a*c)/(2*a);

改成

代码: 全选

p = -b / ( 2.0 * a );
q = sqrt ( b * b - 4.0 * a * c ) / (2.0 * a);
就对了
bluebirdshao
帖子: 186
注册时间: 2007-11-26 12:05

Re: 新手困在了求二元一次方程根的编程上,求指导。

#3

帖子 bluebirdshao » 2012-12-27 20:30

我怀疑你有没有好好看书
yhyhwl
帖子: 3
注册时间: 2012-12-27 19:50
系统: ubuntu

Re: 新手困在了求二元一次方程根的编程上,求指导。

#4

帖子 yhyhwl » 2012-12-27 21:11

bluebirdshao 写了:如果你将

p=-b/(2*a);
q=sqrt(b*b-4*a*c)/(2*a);

改成

代码: 全选

p = -b / ( 2.0 * a );
q = sqrt ( b * b - 4.0 * a * c ) / (2.0 * a);
就对了
谢谢你,可是能麻烦你给我说一下为什么要改成2.0吗?我看了多遍书还是没有找到根据。 :em01
yhyhwl
帖子: 3
注册时间: 2012-12-27 19:50
系统: ubuntu

Re: 新手困在了求二元一次方程根的编程上,求指导。

#5

帖子 yhyhwl » 2012-12-27 21:12

bluebirdshao 写了:我怀疑你有没有好好看书
谢谢你,我以后会更仔细的。
头像
月下叹逍遥
论坛版主
帖子: 33994
注册时间: 2010-10-07 14:23
系统: Archdows10
来自: 某系某星某洲某国某省某市
联系:

Re: 新手困在了求二元一次方程根的编程上,求指导。

#6

帖子 月下叹逍遥 » 2012-12-27 21:24

abc为什么是int?和老谭学的?

Sent from my SK17i using Tapatalk 2
浮生七十今三十,从此凄惶未可知
bluebirdshao
帖子: 186
注册时间: 2007-11-26 12:05

Re: 新手困在了求二元一次方程根的编程上,求指导。

#7

帖子 bluebirdshao » 2012-12-27 21:26

哎,解释真是一件麻烦事:
首先,整型与整型相除,最后结果也是整型(int),所以你的

代码: 全选

p = -b / (2 * a);
得到的结果是整型
如果希望这个结果是你以为的结果,就让整型与浮点型做乘除

代码: 全选

p = -b / (2.0 * a)
另外还有就是,如果你不是写手持机设备的代码,没必要用 float
因为无论是整型的相乖除也好,float 的相乘除也好,最终的计算过程都会将这些类型
转换成 double 类型来做运算,运算完之后再转换回相应的类型。

既然你要的是浮点型的数据干嘛还要做一步多余的转换呢
直接用 double 型。
cao627
帖子: 992
注册时间: 2007-12-05 10:57
系统: ubuntu14.04
来自: 金山

Re: 新手困在了求二元一次方程根的编程上,求指导。

#8

帖子 cao627 » 2012-12-27 21:41

是一元二次方程,还是二元一次方程?
头像
tangboyun
帖子: 701
注册时间: 2009-07-25 1:57
联系:

Re: 新手困在了求二元一次方程根的编程上,求指导。

#9

帖子 tangboyun » 2012-12-28 8:50

这玩意儿写个玩具就可以了,别这真的用。类型也应该用double型。
本来求根公式就经常被用来作为cancellation导致rounding error的示例。
比如见:http://docs.oracle.com/cd/E19957-01/806 ... dberg.html 中的Cancellation这一节。
https://github.com/tangboyun
http://tangboyun.is-programmer.com/
提问的智慧————Eric Steven Raymond
回答的智慧————Andrew Clarke
吾尝终日而思矣,不如须臾之所学也;吾尝跂而望矣,不如登高之博见也。
急急急标题什么的,最讨厌了!
急急复急急,急急何其多,我生待急急,万事急急急。
回复