0 isn't 0 in C++ math - Page 2
CodeGuru Home VC++ / MFC / C++ .NET / C# Visual Basic VB Forums Developer.com
Page 2 of 2 FirstFirst 12
Results 16 to 23 of 23

Thread: 0 isn't 0 in C++ math

  1. #16
    VictorN's Avatar
    VictorN is online now Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Wallisellen (ZH), Switzerland
    Posts
    17,005

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by justutiz View Post
    when add one time its true, but when you do it with cycle it looks something like this

    a = -0.1 + 0.01000000001 and so on
    and then you compare 0 with a it is looks something like this 0 != 0.0000000000001
    Haven't you read yet what I referred to in the post#2?
    Victor Nijegorodov

  2. #17
    Join Date
    Oct 2011
    Posts
    13

    Re: 0 isn't 0 in C++ math

    so
    Code:
    if ( fabsf(c - a) < 0.000001 )
    is the best and shortest way?

  3. #18
    VictorN's Avatar
    VictorN is online now Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Wallisellen (ZH), Switzerland
    Posts
    17,005

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by justutiz View Post
    so
    Code:
    if ( fabsf(c - a) < 0.000001 )
    is the best and shortest way?
    I'd say it is the only way. The question is only about this 'delta' value. In some case your choice with 0.000001 can work, in other - not. It all depends on the problem / values you are working on / with.
    Victor Nijegorodov

  4. #19
    Join Date
    Oct 2011
    Posts
    13

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by VictorN View Post
    I'd say it is the only way. The question is only about this 'delta' value. In some case your choice with 0.000001 can work, in other - not. It all depends on the problem / values you are working on / with.
    so it is posible to make working with all values, if az i take 0.000000001 then it is not working, so i need to add more 0.00000000000000001 in compare, it is other way?

  5. #20
    VictorN's Avatar
    VictorN is online now Super Moderator Power Poster
    Join Date
    Jan 2003
    Location
    Wallisellen (ZH), Switzerland
    Posts
    17,005

    Re: 0 isn't 0 in C++ math

    Again: did you read about FP arithmetic?
    Victor Nijegorodov

  6. #21
    Join Date
    Apr 1999
    Posts
    27,418

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by justutiz View Post
    so it is posible to make working with all values, if az i take 0.000000001 then it is not working, so i need to add more 0.00000000000000001 in compare, it is other way?
    Before you ask more questions, please read this:

    http://www.parashift.com/c++-faq-lit...html#faq-29.16
    http://www.parashift.com/c++-faq-lit...html#faq-29.17
    http://www.parashift.com/c++-faq-lit...html#faq-29.18

    Computers work in binary, not decimal. This means that the decimal numbers you're trying to use must be converted to binary. Do you know how to convert a decimal floating point value to a binary floating point value? If you do, then you will see why decimal fractions cannot have exact binary representations unless they are a sum of inverse powers of 2.

    If you want exact numbers, then don't use float or double. Use a class that represents arbitrary precision numbers, and there are many of them out there.

    Regards,

    Paul McKenzie
    Last edited by Paul McKenzie; October 2nd, 2011 at 09:39 AM.

  7. #22
    Join Date
    Oct 2011
    Posts
    13

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by VictorN View Post
    Again: did you read about FP arithmetic?
    Yes, but dont understand everything. I just need to do a program in few days. This is my first program and I am still learning everything.

  8. #23
    Join Date
    Apr 1999
    Posts
    27,418

    Re: 0 isn't 0 in C++ math

    Quote Originally Posted by justutiz View Post
    Yes, but dont understand everything. I just need to do a program in few days. This is my first program and I am still learning everything.
    Well, this code will not work:
    Code:
    for (float a = ap; a <= ag; a += az)
    Never use floats or doubles as loop counters. Never.

    The reason is that you cannot guarantee how many times that loop will execute. It could execute 1 more time than expected, and the reason was explained by everyone so far -- floating point computations are not exact.

    Always use integers as loop counters. This guarantees that the loop will execute the exact number of times you expect. For example, if you know you should loop from 0.01 to 0.1 then you write this:
    Code:
    for (int i = 1; i <= 100; ++i)
    {
        double myValue = i / 100.0;
        // then you use myValue in the loop, not i
        //...
    }
    Now the loop is guaranteed to loop 100 times. The bottom line is however you do it, the goal is to normalize all "counted" loops to use integers as loop counters.

    Regards,

    Paul McKenzie
    Last edited by Paul McKenzie; October 2nd, 2011 at 09:52 AM.

Page 2 of 2 FirstFirst 12

Tags for this Thread

Posting Permissions

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


Azure Activities Information Page

Windows Mobile Development Center


Click Here to Expand Forum to Full Width

This is a CodeGuru survey question.


Featured


HTML5 Development Center