Login | Register   
RSS Feed
Download our iPhone app
Browse DevX
Sign up for e-mail newsletters from DevX

Tip of the Day
Language: Visual Basic
Expertise: Beginner
Aug 8, 1997

Standard Math Problem

A program originally written using the Borland C++ Compiler has two problems in Visual Basic 3.0, Standard Edition. This program uses trigonometry to calculate the distance between two points, when you know their latitude and longitude, such as N 90 W 123 45 56 S 90 W 0.

The C++ formula, using the Inverse Cosine Function acos() double distance; double radians = 3.141592654 / 180; double intermediate_result; distance=(69.094*acos(intermediate_result)) / radians.

There is a resolution difference between C++ and Visual Basic results.

Problem 1: Inconsistent results: Assume intermediate_result = 0.999995422198391and printing to 10 decimal places. Distance: Using C++ 11.9876152369 miles, using VB 11.9931567014 miles. Inverse Cosine input is -1 to +1, its result is 0 to 180 degrees. In C++, acos(angle).

Visual Basic 3.0, Standard Edition, does not directly support Inverse Cosine. But VB help shows "Derived Math Functions."

Microsoft's formula is: Arcos(x)=Atn(-x/Sqr(-x*x+1))+1.5708. The difference in resolution is that 1.5708 is too large. When I subtract 3.67320510333E-06 from 1.5708, my VB results match my C++ results. Now, I get the exact same answers with VB as with C++.

Problem 2: Hang on -1. When a value of -1 is presented to this "Derived Math Function," Windows Hangs in this Arcos function. Fix for Visual Basic: if intermediate_result = 1 then distance = 0, if intermediate_result = -1 then distance = 180 * 69.094

David Ferber
Comment and Contribute






(Maximum characters: 1200). You have 1200 characters left.



Thanks for your registration, follow us on our social networks to keep up-to-date