check for divisor equal to zero if when handling floats?

Discussion in 'C++' started by Giff, May 15, 2007.

  1. Giff

    Giff Guest

    Hi,

    I have a function that takes in a float and then performs a division.
    Since I know that it is impossible to check if the value I pass is equal
    to zero (being a float), I don't perform any check on that value. Now I
    doubt if this is a safe approach and ask for your advice.

    Thanks a lot in advance.

    /G
    Giff, May 15, 2007
    #1
    1. Advertising

  2. Giff

    Jim Langston Guest

    "Giff" <> wrote in message
    news:f2bpk9$2ri$...
    > Hi,
    >
    > I have a function that takes in a float and then performs a division.
    > Since I know that it is impossible to check if the value I pass is equal
    > to zero (being a float), I don't perform any check on that value. Now I
    > doubt if this is a safe approach and ask for your advice.
    >
    > Thanks a lot in advance.


    On my platform this will produce NaN (Not a Number). Although it's
    difficult to test for NaN.
    But, you can check if it's 0.0f because anything else won't be 0. I.E.
    0.000000000000001 is not 0 and can be a divisor.
    Jim Langston, May 15, 2007
    #2
    1. Advertising

  3. Giff wrote:
    > Since I know that it is impossible to check if the value I pass is equal
    > to zero (being a float), I don't perform any check on that value.


    What do you mean it's "impossible"? Of course it's not impossible.

    I think you have understood the nature of floating point values
    wrongly. Floating point values are not some kind of fuzzy quantum
    states which you can't really measure with accuracy and which hover
    erratically around some value, never being exactly anything.

    Floating point values are a deterministic and well-defined group of
    bits. You might not be able to represent all possible rational values
    with them (such as 0.1) but that doesn't mean you can't represent any
    values with exact accuracy. For example integers can be represented
    with exact accuracy up to a rather big value (to something like 2^51
    or such when using double-precision floating point, a fact which often
    surprises many people).

    Thus this should work just fine:

    double d = 0;
    if(d == 0) { it's 0 }

    Of course a completely different story is whether certain mathematical
    expressions which should give 0 as result really give that, or if
    rounding errors kick in along the way making the result just slightly
    off target.
    For example (0.5+0.5-1) should give exactly 0, but (0.9+0.1-1) might
    not (because 0.9 and 0.1 cannot be represented accurately).

    And then there's the issue, of course, that dividing by a value which
    is very close to 0 (even if it's not supposed to be exactly 0 in the
    first place) might give a result which is too large.

    What you can do is to check if the value is very close to 0 and
    act accordingly.
    Juha Nieminen, May 15, 2007
    #3
  4. Giff

    Giff Guest

    Juha Nieminen ha scritto:

    > What you can do is to check if the value is very close to 0 and
    > act accordingly.


    Thanks very much indeed to both. Surely I was a bit confused.
    Giff, May 15, 2007
    #4
  5. Giff

    Lionel B Guest

    On Tue, 15 May 2007 01:20:00 -0700, Jim Langston wrote:

    > "Giff" <> wrote in message
    > news:f2bpk9$2ri$...
    >> Hi,
    >>
    >> I have a function that takes in a float and then performs a division.
    >> Since I know that it is impossible to check if the value I pass is
    >> equal to zero (being a float), I don't perform any check on that value.
    >> Now I doubt if this is a safe approach and ask for your advice.
    >>
    >> Thanks a lot in advance.

    >
    > On my platform this will produce NaN (Not a Number). Although it's
    > difficult to test for NaN.


    ISO C99 supplies the isnan() function.

    --
    Lionel B
    Lionel B, May 15, 2007
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. eric
    Replies:
    15
    Views:
    1,450
  2. Kosio

    Floats to chars and chars to floats

    Kosio, Sep 16, 2005, in forum: C Programming
    Replies:
    44
    Views:
    1,279
    Tim Rentsch
    Sep 23, 2005
  3. Replies:
    4
    Views:
    1,306
    Martin Ambuhl
    May 30, 2007
  4. Replies:
    0
    Views:
    487
  5. Replies:
    2
    Views:
    753
    Gianni Mariani
    May 30, 2007
Loading...

Share This Page