从QBasic到VB.Net的ATN

从QBasic到VB.Net的ATN,vb.net,translation,qbasic,Vb.net,Translation,Qbasic,我目前正在将一个程序从QBasic翻译成VB.Net,我有以下代码行: RSA = 270 + 180 / PI * (ATN(ABS(X(Z, 2) / X(Z, 1)))) 我把它翻译成 RSA = 270 + 180 / PI * (Math.Atan(Math.Abs(arrayX(z - 1, 2 - 1) / arrayX(z - 1, 1 - 1)))) 但是结果是不同的。以下是一些信息: PI=3.141592654 对于我的测试 我用“6.8929106501697825”

我目前正在将一个程序从QBasic翻译成VB.Net,我有以下代码行:

RSA = 270 + 180 / PI * (ATN(ABS(X(Z, 2) / X(Z, 1))))
我把它翻译成

RSA = 270 + 180 / PI * (Math.Atan(Math.Abs(arrayX(z - 1, 2 - 1) / arrayX(z - 1, 1 - 1))))
但是结果是不同的。以下是一些信息:

PI=3.141592654

对于我的测试
我用“6.8929106501697825”表示我的
X(Z,2)

我对我的
X(Z,1)
值使用了“-5.08864764726704

QBasic的结果是:323.9964
VB.Net的结果是:323.5636369944437

我做错什么了吗


谢谢

我怀疑您遇到了老式的16位QBasic限制

当恐龙在地球上行走时,人们在QBasic中使用单精度浮点数学,他们知道这个变量只能存储7个有效数字

因此,如果您的QBasic数据类型是单数据类型,那么无论您认为您输入了什么,在QBasic中,它们实际上是:

PI = 3.141592
X(Z, 2) = 6.892910
X(Z, 1) = -5.088647

我刚知道我的计算没有问题。结果不同的原因是因为VisualBasic更精确,所以我的计算更精确


谢谢你的回答

对于输入数据,您得到了正确的结果。我的猜测是,当你填充你的数组时,你没有做相同的从1到0的基偏移校正。验证QBasic和VB.NET中的输入数据是否相同。然后,可能QBasic现在非常旧,正在使用查找表计算atn,因此会进行一些舍入。虽然几乎有一半的误差是很难相信的,所以我在声明变量时应该使用Single而不是Double?我尝试将Single改为Double,结果仍然不同。基本上,这个数字四舍五入:323.5636