TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
 Specialized Dev Zones Research Center eBook Library .NET Java C++ Web Dev Architecture Database Security Open Source Enterprise Mobile Special Reports 10-Minute Solutions DevXtra Blogs Slideshow

Language: Visual Basic
Expertise: Beginner
Aug 8, 1997

### WEBINAR:On-Demand

Building the Right Environment to Support AI, Machine Learning and Deep Learning

# 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

 Submit a Tip Browse "XML" Tips Browse All Tips
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