Hello and welcome to our community! Is this your first visit?
Register
Enjoy an ad free experience by logging in. Not a member yet? Register.
Results 1 to 5 of 5
  1. #1
    Regular Coder
    Join Date
    Mar 2004
    Posts
    138
    Thanks
    0
    Thanked 0 Times in 0 Posts

    Float Division Problems (C)

    I have a segment of code that takes an integral float and divides it by ten however many times it's necessary to make it less than one (therefore moving all digits to the right of the decimal). For some reason, I can't get it to work correctly. Here are two different approaches, neither of which works:

    Code:
    /*printfs added for testing*/
    printf("decval is %f\n", decval);
    while((decval /= 10) > 0)
            ;
    printf("decval is %f\n", decval);
    This one, when tested with a decval of five, prints the following:

    5.000000
    0.000000

    I thought that the assignment in the condition might have been messing things up, so I tried the following:

    Code:
    /*printfs added for testing*/
    printf("decval is %f\n", decval);
    while((decval /= 10) && decval > 0)
            ;
    printf("decval is %f\n", decval);
    This did the exact same thing.

    I then thought that maybe there was something wrong with float division, so I changed the first printf to print decval/10, which showed the correct answer of 0.500000... but the while loop still changed it to 0.000000.

    What is it that I'm missing here? I am relatively new to C, but I'm surprised to be having these problems with seemingly simple float division...

    Thanks,
    Matt
    Linux Distribution Download: $0
    OpenOffice.org: $0
    Mozilla: $0
    Gaim: $0
    GIMP: $0
    Converting to Open Source: Priceless

  • #2
    Regular Coder
    Join Date
    Oct 2004
    Posts
    230
    Thanks
    0
    Thanked 0 Times in 0 Posts
    here, try this instead..
    Code:
    int main()
    {
    	float decval = 5.0f;
    	printf("decval is %f\n", decval);
    
    
    	while ( (decval = (decval / 10.0f)) > 0 )
    	{
        	     printf("decval is %.64f\n", decval);
    	}
    
    	return 0;
    }
    or remove the ';' after your while loop...

  • #3
    Regular Coder
    Join Date
    Dec 2003
    Posts
    367
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Your condition is wrong.
    divides it by ten however many times it's necessary to make it less than one
    But instead of having a condition of "keep dividing while greater or equal than one" your condition is "greater than 0".
    Try:
    Code:
    while((decval /= 10) >= 1)
            ;
    instead.

    shmoove

  • #4
    Regular Coder
    Join Date
    Oct 2004
    Posts
    230
    Thanks
    0
    Thanked 0 Times in 0 Posts
    ahh I missed that part, good catch shmoove

  • #5
    Regular Coder
    Join Date
    Mar 2004
    Posts
    138
    Thanks
    0
    Thanked 0 Times in 0 Posts
    Wow I feel stupid. I can't believe I made such a dumb mistake with a loop! Oh well, thanks for the help!

    Matt
    Linux Distribution Download: $0
    OpenOffice.org: $0
    Mozilla: $0
    Gaim: $0
    GIMP: $0
    Converting to Open Source: Priceless


  •  

    Posting Permissions

    • You may not post new threads
    • You may not post replies
    • You may not post attachments
    • You may not edit your posts
    •