View unanswered posts | View active topics It is currently Thu Jul 31, 2014 9:34 am






Reply to topic  [ 5 posts ] 
Can someone explain displaying floating point values? 
Author Message
Novice

Joined: Sun Feb 04, 2007 12:48 am
Posts: 69
Location: Australia
Post Can someone explain displaying floating point values?
Hi

I'm having a bit of trouble displaying floating point values that make sense.

Can anyone explain why the code below is displaying the following:

x= 536870912
PI= 1610612736

Does the display show decimals? Why doesn't the display show

x= 7.89
PI= 3.142 etc

Code:
task main()
{
   float x;
    eraseDisplay();
   x= 7.89;
    nxtDisplayTextLine(1, "x = %d", x);
    nxtDisplayTextLine(4, "PI = %d", PI);
   wait1Msec(10000); //pause ten seconds
}
}


Thanks
James


Tue Feb 20, 2007 8:01 am
Profile
Novice

Joined: Sun Feb 04, 2007 12:48 am
Posts: 69
Location: Australia
Post 
To answer my own email in the interest of others who may follow.

To correctly display floating point variables you need to define how many decimal points you want displayed in the format shown below.


Code:
task main()
{
float x;
   
x= (60/180.0);
eraseDisplay();
nxtDisplayTextLine(1, "x = %+5.3f", x);
nxtDisplayTextLine(4, "PI = %+5.3f", PI);
wait1Msec(10000); //pause ten seconds
}



Another thing to note is that, in order for x to be a decimal/floating point the 180 needs to be written as 180.0 (otherwise x displays 0). Is this intentional? Is it a convention of C based languages? This took me quite a while to work out.

Thanks
James


Wed Feb 21, 2007 9:44 pm
Profile
Creator
Creator

Joined: Fri Feb 09, 2007 9:21 am
Posts: 614
Post 
Regarding evaluating the equation "x = 60 / 180;" where 'x' is a 'float' variable. This is the behavior of the standard C language. Here's what is happening:
  • Arithmetic expressions are evaluated using the type of the parameters('integer' or 'float'). so [int] / [int] is evaluated with integer arithmetic and results in an [int] result. If one of the operands is a [float] then floating point arithmetic will be used in the expression calculation.
  • 60 /180, using integer arithmetic results in 0.
  • The result of the expression is converted to a floating point value (0.0) before it is stored in variable 'x'.

So when you changed '180' to '180.0', the compiler then did the calculations using floating point arithmetic and you get the desired results of 0.3333.

You'd get the same original results if the code was.
int i = 60;
int j = 180;
float x;

x = i/j;

There is a way to force the compiler to use floating point arithmetic in the above. You use a "cast" statement which converts one 'type' to another. The last line above would be replaced with

x = i / (float) j;

The "(float)" is a 'cast' modifier which says convert the expression to the right to a 'float' value. There's a lot more powerful things that you can do with 'cast' but can't be covered here.


Mon Feb 26, 2007 5:01 am
Profile
Novice

Joined: Sun Feb 04, 2007 12:48 am
Posts: 69
Location: Australia
Post 
Dear Dick,

Thank you for elaborating on this topic. Very helpful. :D

James


Tue Feb 27, 2007 6:52 am
Profile
Rookie

Joined: Fri Mar 16, 2007 11:00 pm
Posts: 2
Post Re: Can someone explain displaying floating point values?
Code:
task main()
{
   float x;
    eraseDisplay();
   x= 7.89;
    nxtDisplayTextLine(1, "x = %d", x);
    nxtDisplayTextLine(4, "PI = %d", PI);
   wait1Msec(10000); //pause ten seconds
}
}


Just change %d for %f in your code, I think it will work.


Fri Mar 16, 2007 11:14 pm
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 5 posts ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  



Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.