A program originally written using the Borland C++ Compiler hastwo problems in Visual Basic 3.0, Standard Edition. This programuses trigonometry to calculate the distance between two points,when you know their latitude and longitude, such as N 90 W 12345 56 S 90 W 0.
The C++ formula, using the Inverse Cosine Function acos() doubledistance; double radians = 3.141592654 / 180; double intermediate_result;distance=(69.094*acos(intermediate_result)) / radians.
There is a resolution difference between C++ and Visual Basicresults.
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. InverseCosine 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 supportInverse Cosine. But VB help shows “Derived Math Functions.”
Microsoft’s formula is: Arcos(x)=Atn(-x/Sqr(-x*x+1))+1.5708. Thedifference in resolution is that 1.5708 is too large. When I subtract3.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 Arcosfunction. Fix for Visual Basic: if intermediate_result = 1 thendistance = 0, if intermediate_result = -1 then distance = 180* 69.094