所以,直截了当。我正在使用AppleSoft BASIC,但SQR功能存在一些问题。它似乎在使用较小的完美正方形时产生整数,但在使用较大的正方形时会浮动。例如:
我有这段代码测试一个变量是否为整数,如果是这样就打印“OK”:
] IF INT(X) = X THEN PRINT "OK"
X
定义为
] X = SQR(16)
] PRINT X
4
该函数打印OK
。
但是,X
定义为
] X = SQR(7744)
] PRINT X
88
该功能不会打印任何内容。
(请注意,]
是提示,不包含在代码中。)
荒谬,不是吗?我每次都可以在我的个人Apple // e上重现它,所以你也应该能够在你的个人Apple上重现它。 (现在是1986年!每个人都应该有一个。)
SQR是否可以产生一致的结果?在SQR(16)和SQR(7744)下面是否存在某种内部差异?
P.S。我是S.O.的用户。已经一年多了,但不知怎的,我的帐户已经消失了。所以不,我不只是“开始”。
答案 0 :(得分:0)
我挖出了一些证据/历史。从我的基本编程手册Applesoft] [(1978,Apple Computer Inc.) - 在某些地方添加了一些重点:
P18:
REAL,INTEGER和STRING VARIABLES
APPLESOFT BASIC中使用了三种不同类型的变量。 到目前为止,我们刚刚使用了一种类型 - 真正的精度。数字在这 模式显示最多九个十进制数字的精度和可能 范围可达约10至38次幂。 APPLESOFT转换 您的内部使用的数字从十进制到二进制然后 当你要求它打印答案时回到十进制。因为 舍入错误和其他不可预测的,内部数学例程 如平方根,除法和指数并不总是给出 您期望的确切数字。
所有算术运算都以实际精度完成。整数和 整数变量值在它们之前转换为实际精度 用于计算。 SIN,COS,ATN,TAN,SQR, LOG,EXP和RND也将它们的参数转换为实际精度和 给出他们的结果。
P102:
SQR(aexpr)返回正平方根。 这是一个特别的 执行速度比^ .5
更快
所以,我认为你可能已经发现了一些“数学例程,例如平方根......并不总是给出你期望的确切数字”行为。
关于SQR是针对速度优化的“特殊实现”的说明似乎意味着可能会出现可能导致错误的问题。