Drexel dragonThe Math ForumDonate to the Math Forum



Search All of the Math Forum:

Views expressed in these public forums are not endorsed by Drexel University or The Math Forum.


Math Forum » Discussions » Software » comp.soft-sys.matlab

Topic: Precision of returned values (Builder MWArray)
Replies: 0  

Advanced Search

Back to Topic List Back to Topic List  
Ray

Posts: 11
Registered: 7/6/08
Precision of returned values (Builder MWArray)
Posted: Aug 17, 2008 12:51 AM
  Click to see the message monospaced in plain text Plain Text   Click to reply to this topic Reply

Hello,

I a total novice with Matlab. I have a working Matlab
application someone else wrote and I'm trying to
incorporate it into a C# program using Matlab Builder
for .NET. The Matlab code of interest looks something like
this:

[latlon time] = Fcn(<arguments>);
for k = 1:1:size(latlon,1)
fprintf(fid,'%4.15f %4.15f %4.15f\n', latlon(k,:)');
end

When I debug the code running in Matlab itself and place a
breakpoint appropriately, I can hover the mouse pointer
over latlon and it tells me:

latlon: 1x3 double
39.68 -110.24 75.00

When I hover the mouse pointer over time and it tells me:

time: 1x1 double
733583.90

When I print the values to a file using the fprintf,
however, there are 15 mostly non-0 digits after the decimal
point, as I would expect for a type double with an
arbitrary fractional part using %4.15f.

So my assumption is that the values I'm shown for the
doubles when I hover the mouse pointer over the variables
are just the shortened versions for readability, but their
real precision is still present and is what I am seeing
with the fprintf. Correct so far?

So now for my actual problem... When I create a .NET
component for this function and receive it's return value
as an MWArray[], the values I appear to be getting are the
ones I see when I hover the mouse pointer, that is, they
appear to always actually have only 2 digits after the
decimal point. Maybe I'm extracting them incorrectly from
the MWArray but as near as I can tell the MWArray is in
string format and what's there is there as a string only so
I'm actually only getting two fractional digits.

In my C# code that calls the function I'm extracting the
values from the MWArray as follows:

MWArray[] mwArray = Fcn(2, <arguments>);
string locStr = mwArray[0].ToString();
string timeStr = mwArray[1].ToString();
// Split the location values into individual strings.
string[] location = locStr.Split(new Char[] { ' ' },
StringSplitOptions.RemoveEmptyEntries);

double latitude = Convert.ToDouble(location[0]);
double longitude = Convert.ToDouble(location[1]);
double elevation = Convert.ToDouble(location[2]);
double time = Convert.ToDouble(timeStr);

So the bottom line is how to get the values returned with
any desired precision rather than always with 2 digits
after the decimal point. I don't know whether this is
something that must be done on the C# side or the Matlab
side. Other than this everything seems to be working fine.

Thanks,
Ray Mitchell




Point your RSS reader here for a feed of the latest messages in this topic.

[Privacy Policy] [Terms of Use]

© Drexel University 1994-2014. All Rights Reserved.
The Math Forum is a research and educational enterprise of the Drexel University School of Education.