回 帖 发 新 帖 刷新版面

主题:x^2和x*x的不同

以下两个程序,结果不同:
1.这个在qbasic1.1/qb4.5/qb7.1/vbdos(vbdos的结果比较满意)下运行结果也不同
CLS
INPUT r
a = INT(SQR(r))
FOR x = 0 TO a
FOR y = 0 TO a
FOR z = 0 TO a
IF x ^ 2 + y ^ 2 + z ^ 2 = r THEN n = n + 1: PRINT x; y; z; r
NEXT z, y, x
PRINT n
END
----------------------------------------
2.这个的结果比较统一
CLS
INPUT r
a = INT(SQR(r))
FOR x = 0 TO a
FOR y = 0 TO a
FOR z = 0 TO a
IF x * x + y * y + z * z = r THEN n = n + 1: PRINT x; y; z; r
NEXT z, y, x
PRINT n
END
----------------------------------------
3.由第1个修改后,运行结果同2,输出正常
CLS
INPUT r
a = INT(SQR(r))
FOR x = 0 TO a
FOR y = 0 TO a
FOR z = 0 TO a
m = x ^ 2 + y ^ 2 + z ^ 2
IF m = r THEN n = n + 1: PRINT x; y; z; r
NEXT z, y, x
PRINT n
END

回复列表 (共4个回复)

沙发

为什么啊

板凳

我也想知道为什么。。。
可能是BUG,注意点就没事了

3 楼

石墨啊

4 楼


因为 ^ 是幂运算符, 其结果是按照某种数学算法计算得到的,属于数值计算,会有误差的,尽管误差不大,比如差 10的-14次方等,但是相等比较时已经起作用了。

下面的程序段就打印不出 ok (QuickBASIC 7.1)
cls
a=50
b=2500
if a^2=b then
   print "ok"
end if
end

编程进行数据比较时需要多注意数据类型,使用正确的类型,整数可以进行是否相等比较,实数一般进行差值很小比较

我来回复

您尚未登录,请登录后再回复。点此登录或注册