From: David Jenkins Newsgroups: comp.os.msdos.djgpp Subject: Floating point bug??? Date: Tue, 29 Apr 1997 03:03:16 +0100 Organization: None Distribution: world Message-ID: NNTP-Posting-Host: jenkinsdavid.demon.co.uk MIME-Version: 1.0 Lines: 61 To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Precedence: bulk I'm having some trouble with comparing floats to integers. The following source uses an integer target variable and a floating point current variable. I set the target to a random value the change the value of current depending on whether it is lower or higher than the target variable. It seems simple a enough thing to ask my program to do. BUT it won't, when it reaches "target" weird things happen. The "current" stays an offset according to SPEED away from the "target". I've even tried changing the "target" to a float. Is there some function in C that I don't know about, I'm only a couple of months old. ;-) #include #include #include #define SPEED 0.1 int main() { int target = 0, d, delay1, delay2; float current = 0.0; /* My system normally sets target to 37 FYI ;-) */ target = rand() % 100; for (d = 0; d < 600; d++) { if (current < target) current += SPEED; if (current > target) current -= SPEED; if (current == target) target = rand() % 100; printf("Current = %3.3f Target = %d\n", current, target); /* Just a simple delay I hacked to slow the output. YOU might want to alter this, or remove it. */ delay1 = uclock(); for (delay2 = delay1; uclock() < delay1 + 20000; delay2++) { } } return (0); -- http://www.jenkinsdavid.demon.co.uk for Newbie C programmers and a larf. ;-) David Jenkins