Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

教大家一个不使用浮点数的方法

Posted by aoxboxcox at 2009-04-01 13:43:45 on Problem 1079
晕,怎么这么多人在使用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:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator