- 神风堂人数
- 2009-09-19 19:14:38 @
var q,p:real;
n,l:longint;
begin
readln(p,q);
for n:=1 to 1000000000 do
begin
l:=trunc(n*q/100)-trunc(n*p/100);
case l of
0:continue;
1:if trunc(n*p/100)=n*p/100 then continue
else begin writeln(n); halt; end;
2:if trunc(n*p/100)=n*p/100 then begin writeln(n); halt; end
else continue;
else continue;
end;
end;
end.
3,6数据过不去
1 条评论
-
canglong LV 8 @ 2009-09-19 19:46:23
计算机也有极限,real数据类型有效范围
在计算机中,由于十进制与二进制之间得差异导致某些数在十进制时是容易表示的,但在二进制时却不同,如0.5,二进制似乎是无法完全表示的。
还有就是real 可以表示11到12位有效数字,一旦超过有效位数,就很难确定为零了,但可以界定一个标准,如定小于0.000001 (10^-6)的为零,应该可以过了。
可以自己打代码测试,如
const zero=0;
var i:real;
begin
i:=0.0000000006*0.0000006;//精度出错
i:=i-0.0000000006*0.0000006;
if i=zero then writeln('zero')
else writeln('not zero');
end.结果是:not zero
改为如下就可以了
const zeo=0.000001;
var i:real;
begin
i:=0.0000000006*0.0000006;
i:=i-0.0000000006*0.0000006;
if i
- 1