The Excel calculated value is not matching the VBA calculated value

Copper Contributor

The Excel calculated value is not matching the VBA calculated value. EXCEL: COS(RADIANS(90)) = 6,12574E-17 VBA: COS(90 * (4 * ATN(1))/180) = 6.12323E-17 VBA: COS(WorksheetFunction.RADIANS[…]
The Excel calculated value is not matching the VBA calculated value.

 

EXCEL: COS(RADIANS(90)) = 6,12574E-17
VBA: COS(90 * (4 * ATN(1))/180) = 6.12323E-17
VBA: COS(WorksheetFunction.RADIANS(90)) = 6.12323E-17

 

But why is the floating number then different calculated in an Excel cell and in VBA?
Because now there is little offset in the value.
Rounding it with 4 digits is not really a solution when using accurate calculation when there is an interaction with an Excel calculated value and a VBA value.
It would be better if Excel gave the same answer COS(RADIANS(90)) = 6.12323E-17
But it gives no an answer 6.12574E-17

 

My suggestion is to use the same IEEE calculation error everywhere in the program.

1 Reply

@wiens79 

The discrepancy you are seeing between the Excel-calculated value and the VBA-calculated value is due to the way floating-point arithmetic is handled in Excel and VBA.

Floating-point arithmetic operations can lead to small rounding errors due to the limitations of representing real numbers in binary form. These errors can accumulate and result in slight differences in the calculated values between Excel and VBA.

While it would be ideal for Excel and VBA to produce identical results for the same mathematical operations, this is not always achievable due to differences in their internal calculation methods and precision handling.

One approach to mitigate this issue is to round the results to a certain number of decimal places to reduce the impact of rounding errors. However, as you mentioned, this may not be desirable if precise calculations are necessary.

Another option is to use specialized libraries or tools that offer higher precision arithmetic, such as arbitrary-precision arithmetic libraries or symbolic computation software. These tools can provide more accurate results, but they may also introduce additional complexity and performance overhead.

Ultimately, the choice of approach depends on the specific requirements of your application and the level of precision needed in your calculations. If the slight differences in calculated values are acceptable for your purposes, rounding the results may be a pragmatic solution. If higher precision is required, you may need to explore alternative calculation methods or use specialized tools.

 

Here is both approaches with examples:

 1. Rounding Results:

Vba code

' Example of rounding the result to a specified number of decimal places in VBA
Dim result As Double
result = COS(90 * (4 * ATN(1)) / 180)
result = Round(result, 15) ' Round to 15 decimal places
MsgBox result

In this example, we calculate the cosine of 90 degrees using the VBA COS function and then round the result to 15 decimal places using the Round function. Adjust the number of decimal places as needed.

Similarly, you can round the result in Excel using the ROUND function:

=ROUND(COS(RADIANS(90)), 15)

 

  2. Using Specialized Libraries: If you require higher precision arithmetic, you can consider using specialized libraries or tools. One such library is the MPFR (Multiple Precision Floating-Point Reliable) library, which provides arbitrary-precision arithmetic.

To use MPFR in VBA, you would need to integrate it into your project. Here's a simplified example using the MPFR library (note: this requires a separate installation of the MPFR library and additional setup):

Vba code

' Example of using MPFR library in VBA (simplified)
Dim result As String
result = MPFRCos("90")
MsgBox result

In this example, MPFRCos is a hypothetical function from the MPFR library that calculates the cosine with arbitrary precision.

In Excel, you would typically use a symbolic computation software like MATLAB or Mathematica for higher precision calculations. These tools provide built-in functions for arbitrary precision arithmetic.

Using specialized libraries or tools requires additional setup and may involve a learning curve, but they offer greater control over precision and accuracy in calculations.

Choose the approach that best suits your requirements and constraints. If the slight differences in calculated values are acceptable, rounding the results may be sufficient. If you need higher precision, consider exploring specialized libraries or tools for arbitrary precision arithmetic.

 

NOTE: My knowledge of this topic is limited, I entered your question in various AI. The text and the steps are the result of AI. Maybe it will help you further in your project, if not please just ignore it.

 

 

My answers are voluntary and without guarantee!

 

Hope this will help you.

Was the answer useful? Mark as best response and Like it!

This will help all forum participants.