• DarkMessiah@lemmy.world
    link
    fedilink
    arrow-up
    34
    ·
    edit-2
    1 year ago

    Just in case anyone was looking for a decent way to do it…

    if (((number/2) - round(number/2)) == 0) return true;
    
    return false;
    

    Or whatever the rounding function is in your language of choice.

    EDIT: removed unnecessary else.

    • Acters@lemmy.world
      link
      fedilink
      arrow-up
      16
      ·
      edit-2
      1 year ago

      Every bit aside for the ones bit is even. All you have to do is get the ones bit(the far right) for it being a 1 or 0. Which is the fastest and least amount of code needed.

      use bitwise &

      // n&1 is true, then odd, or !n&1 is true for even  
      
       return (!(n & 1));  
      
    • 257m@sh.itjust.works
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      1 year ago
      number % 2 == 0
      and
      (number & 0b1) == 0
      

      Are the only sane ways to do this. No need to floor. Although If its C and you can’t modulo floats then (number/2 == floor(number/2))

        • 257m@sh.itjust.works
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          Whats the alternative a macro? An inline function is perfectly fine for checking if a nunber is even. Compiler will probably optimize it to a single and instruction.

          • homura1650@lemmy.world
            link
            fedilink
            arrow-up
            2
            ·
            edit-2
            1 year ago

            No. The alternative is to not use a float. Testing if a float is even simply does not make sense.

            Even testing two floats for equality rarely makes sense.

            What is the correct output of isEven((.2 + .4) ×10)

            Hint: (.2 + .4) x 10 != 6

            • 257m@sh.itjust.works
              link
              fedilink
              arrow-up
              1
              ·
              edit-2
              1 year ago

              It does if it dosen’t have a decimal. If it has decimal then it automatically isn’t and the function will return false. Are you talking about cases like 0.1 + 0.2 equaling 0.3000000004 because that is just due to the nature of floats and there is nothing a function can do other than use larger floats for more accuracy.