ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Data Types and inaccuracies with Trig functions in VBA (https://www.excelbanter.com/excel-programming/291260-data-types-inaccuracies-trig-functions-vba.html)

Peter M[_3_]

Data Types and inaccuracies with Trig functions in VBA
 
I am developing an application to calculate navigation data from Sun & Star
sights (interesting for sailors, boring for everyone else).

The problem is that I appear to be getting small inaccuracies when
calculating angles. I have used Double as the data type. Looking through
the help files I note that there should be a 'Decimal' data type that uses
many more digits so potentially improving accuracy. However, a line such
as:

Dim dLat as Decimal

results in a message: 'Compile error: Expected: New or type name'

I understand that this is saying it doesn't recognise the Decimal data type.
Do I have to add a library to use this? if so which one?

Any ideas gratefully received.

Peter Morris



Jim Cone

Data Types and inaccuracies with Trig functions in VBA
 
Peter,

From a Myrna Larson post:
'-----------------------------------
The decimal data type is a subtype of a variant. You must Dim the variable as a
variant, then put the data into it with the CDec function. Since Decimals can
have up to 28 significant figures, and doubles are limited to 15 or 16, how do
you assign a literal value to one? From a string representation of the number,
i.e.
Dim Dec As Variant
Dec = CDec("1234567890123456789012345678")
Debug.Print Dec, TypeName(Dec)
'------------------------------------
From a Chip Pearson post:
To display these values on a worksheet, you'll have to change them to
strings to prevent Excel from rounding them ...
Range("C2").Value = " ' " & CStr(Dec)
'-----------------------------------

Regards,
Jim Cone
San Francisco, CA

"Peter M" wrote in message
...
I am developing an application to calculate navigation data from Sun & Star
sights (interesting for sailors, boring for everyone else).
The problem is that I appear to be getting small inaccuracies when
calculating angles. I have used Double as the data type. Looking through
the help files I note that there should be a 'Decimal' data type that uses
many more digits so potentially improving accuracy. However, a line such
as:
Dim dLat as Decimal
results in a message: 'Compile error: Expected: New or type name'
I understand that this is saying it doesn't recognise the Decimal data type.
Do I have to add a library to use this? if so which one?
Any ideas gratefully received.
Peter Morris





Peter M[_3_]

Data Types and inaccuracies with Trig functions in VBA
 
Jim,

Does this mean that I could get greater accuracy simply by declaring
variables as Variant rather than Double?

ie use: Dim x, y, z
rather than Dim x as double, y as double, z as double.

Peter Morris

"Jim Cone" wrote in message
...
Peter,

From a Myrna Larson post:
'-----------------------------------
The decimal data type is a subtype of a variant. You must Dim the variable

as a
variant, then put the data into it with the CDec function. Since Decimals

can
have up to 28 significant figures, and doubles are limited to 15 or 16,

how do
you assign a literal value to one? From a string representation of the

number,
i.e.
Dim Dec As Variant
Dec = CDec("1234567890123456789012345678")
Debug.Print Dec, TypeName(Dec)
'------------------------------------
From a Chip Pearson post:
To display these values on a worksheet, you'll have to change them to
strings to prevent Excel from rounding them ...
Range("C2").Value = " ' " & CStr(Dec)
'-----------------------------------

Regards,
Jim Cone
San Francisco, CA

"Peter M" wrote in message
...
I am developing an application to calculate navigation data from Sun &

Star
sights (interesting for sailors, boring for everyone else).
The problem is that I appear to be getting small inaccuracies when
calculating angles. I have used Double as the data type. Looking

through
the help files I note that there should be a 'Decimal' data type that

uses
many more digits so potentially improving accuracy. However, a line

such
as:
Dim dLat as Decimal
results in a message: 'Compile error: Expected: New or type name'
I understand that this is saying it doesn't recognise the Decimal data

type.
Do I have to add a library to use this? if so which one?
Any ideas gratefully received.
Peter Morris







Tom Ogilvy

Data Types and inaccuracies with Trig functions in VBA
 
No. And you really can't get more accuracy unless you write your own
functions. If you passed a Variant of type Decimal to a built in function,
it would be converted to double or whatever the function normally works in.

I know someone has written an addin that does basic math with numbers of
creater precision than double, but I don't recall the name of it or the
author. You could try a google search on Excel, Addin, Precision or
something like that. Anyway, as I recall, this person was adding standard
functions to the addin to do more complex math at higher pecision. Note
that Excel works at the IEEE standard for double precision which is about 15
digits.

Also, Chip Pearson has a page on working with Latitudes and Longitudes-
maybe this has some bearing on your problem.
http://www.cpearson.com/excel/latlong.htm

Anyway, just declaring a variable as Variant will not make it a decimal
value if you assign it a number. It will retain whatever precision it had.
You would have to assign it to the variant with the cdec conversion function

Dim vVariant as Variant
vVariant = cdec(123.456567)

--
Regards,
Tom Ogilvy

"Peter M" wrote in message
...
Jim,

Does this mean that I could get greater accuracy simply by declaring
variables as Variant rather than Double?

ie use: Dim x, y, z
rather than Dim x as double, y as double, z as double.

Peter Morris

"Jim Cone" wrote in message
...
Peter,

From a Myrna Larson post:
'-----------------------------------
The decimal data type is a subtype of a variant. You must Dim the

variable
as a
variant, then put the data into it with the CDec function. Since

Decimals
can
have up to 28 significant figures, and doubles are limited to 15 or 16,

how do
you assign a literal value to one? From a string representation of the

number,
i.e.
Dim Dec As Variant
Dec = CDec("1234567890123456789012345678")
Debug.Print Dec, TypeName(Dec)
'------------------------------------
From a Chip Pearson post:
To display these values on a worksheet, you'll have to change them to
strings to prevent Excel from rounding them ...
Range("C2").Value = " ' " & CStr(Dec)
'-----------------------------------

Regards,
Jim Cone
San Francisco, CA

"Peter M" wrote in message
...
I am developing an application to calculate navigation data from Sun &

Star
sights (interesting for sailors, boring for everyone else).
The problem is that I appear to be getting small inaccuracies when
calculating angles. I have used Double as the data type. Looking

through
the help files I note that there should be a 'Decimal' data type that

uses
many more digits so potentially improving accuracy. However, a line

such
as:
Dim dLat as Decimal
results in a message: 'Compile error: Expected: New or type name'
I understand that this is saying it doesn't recognise the Decimal data

type.
Do I have to add a library to use this? if so which one?
Any ideas gratefully received.
Peter Morris









jaf

Data Types and inaccuracies with Trig functions in VBA
 
Hi Tom,
I think this is the site. http://precisioncalc.com/
I don't see any trig functions. May be able to code them the hard way.


--
John
johnf 202 at hotmail dot com


"Tom Ogilvy" wrote in message
...
| No. And you really can't get more accuracy unless you write your own
| functions. If you passed a Variant of type Decimal to a built in
function,
| it would be converted to double or whatever the function normally works
in.
|
| I know someone has written an addin that does basic math with numbers of
| creater precision than double, but I don't recall the name of it or the
| author. You could try a google search on Excel, Addin, Precision or
| something like that. Anyway, as I recall, this person was adding
standard
| functions to the addin to do more complex math at higher pecision. Note
| that Excel works at the IEEE standard for double precision which is about
15
| digits.
|
| Also, Chip Pearson has a page on working with Latitudes and Longitudes-
| maybe this has some bearing on your problem.
| http://www.cpearson.com/excel/latlong.htm
|
| Anyway, just declaring a variable as Variant will not make it a decimal
| value if you assign it a number. It will retain whatever precision it
had.
| You would have to assign it to the variant with the cdec conversion
function
|
| Dim vVariant as Variant
| vVariant = cdec(123.456567)
|
| --
| Regards,
| Tom Ogilvy
|
| "Peter M" wrote in message
| ...
| Jim,
|
| Does this mean that I could get greater accuracy simply by declaring
| variables as Variant rather than Double?
|
| ie use: Dim x, y, z
| rather than Dim x as double, y as double, z as double.
|
| Peter Morris
|
| "Jim Cone" wrote in message
| ...
| Peter,
|
| From a Myrna Larson post:
| '-----------------------------------
| The decimal data type is a subtype of a variant. You must Dim the
| variable
| as a
| variant, then put the data into it with the CDec function. Since
| Decimals
| can
| have up to 28 significant figures, and doubles are limited to 15 or
16,
| how do
| you assign a literal value to one? From a string representation of the
| number,
| i.e.
| Dim Dec As Variant
| Dec = CDec("1234567890123456789012345678")
| Debug.Print Dec, TypeName(Dec)
| '------------------------------------
| From a Chip Pearson post:
| To display these values on a worksheet, you'll have to change them to
| strings to prevent Excel from rounding them ...
| Range("C2").Value = " ' " & CStr(Dec)
| '-----------------------------------
|
| Regards,
| Jim Cone
| San Francisco, CA
|
| "Peter M" wrote in message
| ...
| I am developing an application to calculate navigation data from Sun
&
| Star
| sights (interesting for sailors, boring for everyone else).
| The problem is that I appear to be getting small inaccuracies when
| calculating angles. I have used Double as the data type. Looking
| through
| the help files I note that there should be a 'Decimal' data type
that
| uses
| many more digits so potentially improving accuracy. However, a line
| such
| as:
| Dim dLat as Decimal
| results in a message: 'Compile error: Expected: New or type name'
| I understand that this is saying it doesn't recognise the Decimal
data
| type.
| Do I have to add a library to use this? if so which one?
| Any ideas gratefully received.
| Peter Morris
|
|
|
|
|
|
|




All times are GMT +1. The time now is 05:26 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com