CCS C Software and Maintenance Offers
FAQFAQ   FAQForum Help   FAQOfficial CCS Support   SearchSearch  RegisterRegister 

ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

CCS does not monitor this forum on a regular basis.

Please do not post bug reports on this forum. Send them to CCS Technical Support

if statement evaluated incorrectly - float type

 
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion
View previous topic :: View next topic  
Author Message
fvnktion



Joined: 27 Jun 2006
Posts: 39

View user's profile Send private message

if statement evaluated incorrectly - float type
PostPosted: Wed Feb 11, 2009 6:07 pm     Reply with quote

I am evaluating float type value and the if statement is not evaluating them correctly.

In the first cases of test_var and test_var2 it is evaluated correctly, but not in the second case where they are 16 bit values int equivalents.

Do i need to do something special to evaluate them correctly? I have tried to type cast them , but no go. Any other suggestions?

using compiler 4.083

Thanks,

Code:
//the if evaluates correctly here
/*
test_var = 1;
test_var2 = 5;
*/

//the if evaluates incorrectly here - never enters
test_var = 14810;
test_var2 = 52370;


if (test_var2 > test_var ){
 
T2ON = 1;
led_blink();
T2ON = 0;

}
PCM programmer



Joined: 06 Sep 2003
Posts: 21708

View user's profile Send private message

PostPosted: Wed Feb 11, 2009 6:51 pm     Reply with quote

Post the variable declarations. It's essential.

Post your PIC and your compiler version. Do this on any suspected bug.
rnielsen



Joined: 23 Sep 2003
Posts: 852
Location: Utah

View user's profile Send private message

PostPosted: Thu Feb 12, 2009 10:10 am     Reply with quote

If you have declared each variable as int8's then when you assign the different values they will actually hold the following:

Code:
int8 test_var, test_var2;

test_var = 1;// hex value of 0x01
test_var2 = 5;// hex value of 0x05

test_var = 14810; // hex value of 0xDA
test_var2 = 52370;// hex value of 0x92


As you can see, test_var is larger than test_var2 if they are int8's. Make sure you have them declared as int16. I believe that should cure your problem. Remember that simply declaring a variable as 'int' it will default to int8.

Ronald
cuma_polat



Joined: 24 Nov 2008
Posts: 3

View user's profile Send private message

float type values
PostPosted: Sun Jun 28, 2009 5:19 am     Reply with quote

Hi,

I have same problem about comparison of two float type values. As you see from the code I wrote very simply in order to calculate big float type number. But the program gives "20" from the LCD.

My main question is
"Can we compare two float type numbers by using if statement in CCS C compiler?"
Code:

#include <30F4013.h>
#device ADC=10
#use delay(clock=10000000)
#FUSES HS
#use rs232(UART2,baud=9600,xmit=PIN_F3,rcv=PIN_F2,parity=N,bits=8)
#include <math.h>
#include <flex_lcd.c>
#use fast_io(B)
#use fast_io(C)
#use fast_io(D)
#use fast_io(F)

float n=0.8;
float c=0.4;
int8 nu2;

void main(){

lcd_init();

while(true){

         if  ( c < n ) nu2=1;
            else nu2=20;
 
 printf(lcd_putc,"\fnu2=%d",nu2);
delay_ms(200);
 }
}


or how can I?
Ttelmah
Guest







PostPosted: Sun Jun 28, 2009 7:29 am     Reply with quote

The original poster, did not have a 'float' problem, despite the title of the thread.

What you post, works OK, on a PIC18, so if you are seeing '20', I'd suspect a bug with the 30F code.

Try something that tests both constant values, and variables, like:
Code:

//Processor definition, clock, and fuses here
//#use RS232 here
#include <input.c>

void main(void) {
   float val1,val2;
   char temp[40], *ptr;
   val2=0.4;
   val1=0.2; //Rule out an initialisation bug
   
   if (val2<val1) putc("\fwrong");
   else putc("\fOK");
   while(true) {
       //Now try with a variable value
       get_string(temp,39);
       val1=strtod(temp,ptr);
       
       if  ( val1 < val2 ) putc("\fbelow 0.4");
       else putc("\f0.4 or above");
   }
}


This does correctly distinguish float values on a PIC18.

Best Wishes
Display posts from previous:   
Post new topic   Reply to topic    CCS Forum Index -> General CCS C Discussion All times are GMT - 6 Hours
Page 1 of 1

 
Jump to:  
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 vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group