2012-02-22 2 views
2

я в настоящее время перевод программы с QBasic на VB.Net и у меня есть эта строка кода:ATN с 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)))) 

для VB .Net, но результаты разные. Вот некоторые сведения:

PI = 3,141592654

И для моего теста
я использовал "6.8929106501697825" для моего значения X(Z, 2)
я использовал "-5.08864764726704" для моего X(Z, 1) значения

Результат для QBasic: 323.9964
Результат для VB.Net: 323.5636369944437

Я сделал что-то не так?

Благодаря

+2

У вас есть правильный результат для входных данных, которые у вас есть. Я предполагаю, что когда вы заполнили свой массив, вы не сделали то же исправление от 1 до 0 базового смещения. Убедитесь, что входные данные в QBasic и VB.NET одинаковы. – Aleks

+0

Да, они такие же. – Holytoutant

+0

Тогда, возможно, QBasic, будучи очень старым, теперь использует таблицы поиска для вычисления atn, поэтому делает некоторое округление. Хотя с ошибкой почти на половину градуса трудно поверить – Aleks

ответ

1

Я просто leanrned, что нет никаких проблем в моем расчете. Причина, по которой результат отличается, заключается только в том, что Visual Basic более точен, поэтому мои вычисления являются более точными.

Большое спасибо за ответы!

2

Я подозреваю, что вы работаете в старомодное 16-битном ограничение QBasic.

Возвращение назад, когда динозавры шли по земле, и люди использовали математику с одинарной точностью с плавающей запятой в QBasic, они знали, что переменная будет хранить только 7 значащих цифр.

Так что, если ваши QBasic типы данных синглы, то независимо от того, что вы считаете, что вы вошли в QBasic они на самом деле быть:

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

Итак, я должен использовать Single вместо Double при объявлении переменных? – Holytoutant

+0

Я попытался изменить свои синглы на пары, и результат по-прежнему отличается. В основном, число просто округлено: ** 323.5636 ** – Holytoutant