2012-02-22 3 views
2

Je traduis actuellement un programme de QBasic à VB.Net et j'ai cette ligne de code:ATN de QBasic à VB.Net

RSA = 270 + 180/PI * (ATN(ABS(X(Z, 2)/X(Z, 1)))) 

Je traduis comme

RSA = 270 + 180/PI * (Math.Atan(Math.Abs(arrayX(z - 1, 2 - 1)/arrayX(z - 1, 1 - 1)))) 

pour VB .Net mais les résultats sont différents. Voici quelques informations:

PI = 3,141592654

Et pour mon test
je "6,8929106501697825" pour ma X(Z, 2) valeur
je "-5,08864764726704" pour ma X(Z, 1) valeur

Le résultat pour QBasic est: 323.9964
Le résultat de VB.Net est: 323.5636369944437

Ai-je commis une erreur?

Merci

+2

Vous avez obtenu le bon résultat pour les données d'entrée dont vous disposez. Ma conjecture est quand vous avez rempli votre tableau que vous n'avez pas fait la même correction de décalage de base de 1 à 0. Vérifiez que les données d'entrée dans QBasic et VB.NET sont identiques. – Aleks

+0

Oui, ils sont identiques. – Holytoutant

+0

Alors peut-être QBasic étant très vieux maintenant utilise des tables de recherche pour calculer atn fait donc un peu d'arrondi. Bien qu'il soit difficile de croire qu'il y ait presque un demi-degré d'erreur – Aleks

Répondre

1

Je viens leanrned qu'il n'y a pas de problème dans mon calcul. La raison pour laquelle le résultat est différent est juste parce que Visual Basic est plus précis, donc mon calcul est juste plus précis.

Merci beaucoup pour les réponses!

2

Je suppose que vous êtes en cours d'exécution dans une ancienne limite de 16 bits de QBasic.

À l'époque où les dinosaures parcouraient la terre, et où les gens utilisaient les maths à virgule flottante simple précision dans QBasic, ils savaient que la variable n'enregistrerait que 7 chiffres significatifs.

Donc, si vos types de données QBasic simples, alors peu importe ce que vous croyez que vous avez entré, en QBasic ils réellement:

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

Donc, je devrais utiliser Single au lieu de Double lors de la déclaration de mes variables? – Holytoutant

+0

J'ai essayé de changer mes Singles en Doubles et le résultat est encore différent. Fondamentalement, le nombre vient d'être arrondi: ** 323.5636 ** – Holytoutant