Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
教大家一个不使用浮点数的方法晕,怎么这么多人在使用double,而且还有讨论精度的问题。 不过,我也相信不少人看了标题就知道我要说什么了。 知道的人就不用往下看了,直接点返回吧。 不知道的继续。 (1)假设假设输入是a/b,需要近似成p/q 在知道q的情况下,怎么求p? 很简单:p=(double)(q*a)/(double)b+0.5; 这是唯一需要在中间过程加入浮点转型的。 (2)假设输入是a/b,已经近似成p/q 在a,b没有约分的情况下,怎么判断a/b=p/q? 也很简单:if(a*q==b*p) (3)假设输入是a/b,近似成p1/q1和p2/q2 怎么判断p1/q1比p2/q2更接近a/b? |p1/q1 - a/b| < |p2/q2 - a/b| <==>|a*q1-b*p1|/(b*q1) < |a*q2-b*p2|/(b*q2) <==>q2*|a*q1-b*p1| < q1*|a*q2-b*p2| 所以是:if(q2*abs(a*q1-b*p1)<q1*abs(a*q2-b*p2)) 可以了,现在这道题目已经变得超简单了,各位继续吧。 Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator