Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. The Lounge
  3. Your mission, should you choose to accept it..

Your mission, should you choose to accept it..

Scheduled Pinned Locked Moved The Lounge
questionlounge
41 Posts 10 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • L Luc Pattyn

    12? that is a lot. Lets use the sign bit now:

    if ( (a|-a)&(b|-b)&(c|-c) < 0 ) log("all non-zero");

    :-D

    Luc Pattyn [My Articles] Nil Volentibus Arduum

    A Offline
    A Offline
    AspDotNetDev
    wrote on last edited by
    #31

    Well done. :thumbsup:

    Thou mewling ill-breeding pignut!

    L 1 Reply Last reply
    0
    • A AspDotNetDev

      Well done. :thumbsup:

      Thou mewling ill-breeding pignut!

      L Offline
      L Offline
      Luc Pattyn
      wrote on last edited by
      #32

      Thanks. The nice thing about this approach is it works for all widths, and for any number of product factors, as long as they are all signed integers. :)

      Luc Pattyn [My Articles] Nil Volentibus Arduum

      1 Reply Last reply
      0
      • L Luc Pattyn

        12? that is a lot. Lets use the sign bit now:

        if ( (a|-a)&(b|-b)&(c|-c) < 0 ) log("all non-zero");

        :-D

        Luc Pattyn [My Articles] Nil Volentibus Arduum

        L Offline
        L Offline
        Lost User
        wrote on last edited by
        #33

        Wait a minute.. the challenge was for any zero (ie the reverse condition) Which is a trivial change to this solution, but still..

        1 Reply Last reply
        0
        • L Lost User

          .. is to write a replacement for if (a == 0 || b == 0 || c == 0), that - uses at most one comparison. - uses only integer arithmetic. - does not make assumptions about the values of a b and c, except that they are 32-bit 2's complement integers. This entirely useless challenge (is there any other kind?) was inspired by a question on a site that shall not be named, asking for a shorter way to write it. But then people started answering with a * b * c == 0 (which is wrong in general, bonus points if you know why) and (a | b | c) == 0 which is a nice try but tests whether all of them are zero instead of any of them. That inspired me to search for a solution like that, and I found 2, one of which uses only basic operators. Can you find it?

          L Offline
          L Offline
          Luc Pattyn
          wrote on last edited by
          #34

          harold aptroot wrote:

          entirely useless challenge (is there any other kind?)

          Some of these wouldn't be called entirely useless, would they? :) PS: the damn link-paste bug is acting up again.

          Luc Pattyn [My Articles] Nil Volentibus Arduum

          L 1 Reply Last reply
          0
          • L Luc Pattyn

            harold aptroot wrote:

            entirely useless challenge (is there any other kind?)

            Some of these wouldn't be called entirely useless, would they? :) PS: the damn link-paste bug is acting up again.

            Luc Pattyn [My Articles] Nil Volentibus Arduum

            L Offline
            L Offline
            Lost User
            wrote on last edited by
            #35

            Aren't they just some other kind of useless? The kind of useless where you won't solve the challenge anyway so why bother.. But you have a point

            L 1 Reply Last reply
            0
            • L Lost User

              Aren't they just some other kind of useless? The kind of useless where you won't solve the challenge anyway so why bother.. But you have a point

              L Offline
              L Offline
              Luc Pattyn
              wrote on last edited by
              #36

              When everything were useless, then so would be the word itself. :)

              Luc Pattyn [My Articles] Nil Volentibus Arduum

              L 1 Reply Last reply
              0
              • L Luc Pattyn

                When everything were useless, then so would be the word itself. :)

                Luc Pattyn [My Articles] Nil Volentibus Arduum

                L Offline
                L Offline
                Lost User
                wrote on last edited by
                #37

                Ok that's a bit too deep for me at 1 in the morning..

                1 Reply Last reply
                0
                • A AspDotNetDev

                  Pfft, I don't even need a comparison:

                  try
                  {
                  int x = 1 / a / b / c;
                  }
                  catch (DivideByZeroException)
                  {
                  // One of them was zero.
                  }

                  Thou mewling ill-breeding pignut!

                  C Offline
                  C Offline
                  Chris Maunder
                  wrote on last edited by
                  #38

                  My eyes! It burnssses!

                  cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                  1 Reply Last reply
                  0
                  • L Luc Pattyn

                    12? that is a lot. Lets use the sign bit now:

                    if ( (a|-a)&(b|-b)&(c|-c) < 0 ) log("all non-zero");

                    :-D

                    Luc Pattyn [My Articles] Nil Volentibus Arduum

                    C Offline
                    C Offline
                    Chris Maunder
                    wrote on last edited by
                    #39

                    You're an artist, Luc.

                    cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                    L 1 Reply Last reply
                    0
                    • C Chris Maunder

                      You're an artist, Luc.

                      cheers, Chris Maunder The Code Project | Co-founder Microsoft C++ MVP

                      L Offline
                      L Offline
                      Luc Pattyn
                      wrote on last edited by
                      #40

                      I know my bits and bytes, embedded systems do that to a person. :)

                      Luc Pattyn [My Articles] Nil Volentibus Arduum

                      1 Reply Last reply
                      0
                      • A AspDotNetDev

                        Pfft, I don't even need a comparison:

                        try
                        {
                        int x = 1 / a / b / c;
                        }
                        catch (DivideByZeroException)
                        {
                        // One of them was zero.
                        }

                        Thou mewling ill-breeding pignut!

                        L Offline
                        L Offline
                        Lost User
                        wrote on last edited by
                        #41

                        Nice approach, but we all know that it's not good programming manners to use expceptions to calculate values or control program flow.

                        1 Reply Last reply
                        0
                        Reply
                        • Reply as topic
                        Log in to reply
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes


                        • Login

                        • Don't have an account? Register

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • World
                        • Users
                        • Groups