• BeigeAgenda@lemmy.ca
      link
      fedilink
      arrow-up
      28
      arrow-down
      1
      ·
      edit-2
      1 year ago

      No its not the wrong solution! Premature optimization is a waste of time.

      Using if or case are not a solution because they are way too verbose and very easy to introduce an error.

      Modulo is a solution, and using bit-wise and is another faster solution.

      • droans@lemmy.world
        link
        fedilink
        arrow-up
        6
        arrow-down
        1
        ·
        1 year ago

        It’s only the wrong solution if you’re writing something where every operation needs to be accounted for. Modulo is a great, easy, readable method otherwise.

        Not too certain on C++, but I think this would be the cleanest implementation that still somewhat optimizes itself:

        private bool IsEven(int number){
            return !(number % 2)
        }
        
      • mryessir@lemmy.sdf.org
        link
        fedilink
        arrow-up
        4
        arrow-down
        14
        ·
        1 year ago

        You call it premature optimization. I call it obvious.

        You use a flat head as a Phillip’s.

        • Maalus@lemmy.world
          link
          fedilink
          arrow-up
          17
          ·
          1 year ago

          You can call it whatever you like, the fact of the matter remains - code readibility is more important than most optimizations you can ever hope to make.

          Bad programmers optimize everything and produce code that is not understandabe and 0.001% “faster”

          • spudwart@spudwart.com
            link
            fedilink
            English
            arrow-up
            4
            arrow-down
            2
            ·
            1 year ago

            Optimization isn’t inherently better than Readable code.

            What’s most important is what matters to your project.

            If your project manages itself with limited resources, Optimization is better than Readable code, and it should be supplemented with comments.

            If your project has a wealth of resources, readable code is probably the better option.

            The “This is the ONLY WAY” mindset in coding is the only thing that I would argue is completely wrong. The “One-size fits all” mindset in development is short sighted, sure. but what makes it the worst, is when it becomes “One-Size fits all ONLY”.

            “One-size fits all” means the project runs well on everything. “Optimized for one” means the project runs exceptionally on one Architecture/OS.

            Basically, this situation is the highly unsatisfying “It’s your preference”.

            But given the context of Yandere Dev and the Target Audience of Yandere Simulator, his code is perfect. It’s code that runs terribly on everything and the project is for no one.

        • BeigeAgenda@lemmy.ca
          link
          fedilink
          arrow-up
          7
          ·
          1 year ago

          I call it making assumptions that may be incorrect, and do you know if the compiler will do the optimization anyway in this case?

          • mryessir@lemmy.sdf.org
            link
            fedilink
            arrow-up
            2
            arrow-down
            2
            ·
            edit-2
            1 year ago

            What statement do you flag as assumption? Yes, I do. The modulo operator is only a subset of bit masks. It is more explicit to write:

            if ( (variable &EVEN_MASK) == 0) …

            To act upon even numbers then:

            if ( (variable %2) == 0) …

            How would you name the 2 in the above statement for more expressive power?

            EVEN_MODULO_OP ? That may throw more people off imo.

            • Kogasa@programming.dev
              link
              fedilink
              arrow-up
              10
              ·
              1 year ago

              You shouldn’t rename 2 at all. “Even” has a commonly understood meaning that is instantly recognizable from (variable %2) == 0. The bitmask is an overgeneralization.

            • BeigeAgenda@lemmy.ca
              link
              fedilink
              arrow-up
              4
              arrow-down
              3
              ·
              1 year ago

              I give up, I was wrong to even think about the modulo operator, you are clearly the master programmer. 🥇

              This reminds me of a discussion about the ternary operator ? :, some people think its the one true way of writing code because its just so clear what it does. And I say please use it sparingly because if you start doing nested ternary operators its very hard to unpack what your code does, and I prefer readability over compact code, especially with today’s compilers.

    • TheManuz@lemmy.world
      link
      fedilink
      arrow-up
      25
      ·
      1 year ago

      Wrong means that it doesn’t produce the right output.

      How is the modulo operator the wrong solution?

      • mellejwz@lemmy.world
        link
        fedilink
        English
        arrow-up
        4
        arrow-down
        1
        ·
        1 year ago

        Not neccessarily wrong, but you could also check the first bit. If it’s 1 the number is uneven, if it’s 0 the number is even. That seems to be more efficient.

        • dukk@programming.dev
          link
          fedilink
          arrow-up
          5
          ·
          1 year ago

          That’s what I was thinking too… Although, I wouldn’t be surprised if most languages convert modulo 2 to this automatically.

            • dukk@programming.dev
              link
              fedilink
              arrow-up
              2
              ·
              1 year ago

              That’s the main issue with premature optimization: do it the “optimized” way and it may still be inefficient, or do it the obvious way and let the compiler turn it into its most optimized form. (Of course, not the case with all languages, but most mainstream compilers optimize the code to a decent extent.)

        • herrvogel@lemmy.world
          link
          fedilink
          arrow-up
          3
          ·
          1 year ago

          Modern compilers and interpreters are smart enough to figure out what you’re trying to do and automatically do that for you.

        • ziviz@lemmy.sdf.org
          link
          fedilink
          English
          arrow-up
          2
          ·
          1 year ago

          Huh… That makes sense. Til. Ran some tests but speed is pretty similar. Only 4% faster using bitmath or 300 milliseconds difference after 10mil runs.