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. Other Discussions
  3. The Weird and The Wonderful
  4. Ever heard of casting?

Ever heard of casting?

Scheduled Pinned Locked Moved The Weird and The Wonderful
question
33 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.
  • C chevu

    well you can do something that save time and processing time, try this decimal res = 10; decimal rem = 1; int pow = 18; while(pow > 0) { res *= res; rem *= (pow%2)? 1:10; pow /= 2; } res *= rem;

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

    Is that an attempt at binary exponentiation?

    1 Reply Last reply
    0
    • J johannesnestler

      :wtf: test your code - it saves processing time, but raises debug time - if you are able to compile it ;P

      C Offline
      C Offline
      chevu
      wrote on last edited by
      #15

      it might have a syntax error but you can do it this way.. you can refer algorithm by corman... n compare to given algo for (int i = 0; i < 18; i++) { tenE18 *= 10; } this one will run for 18times.. for debuging also you have to go through this loop 18 times... then how can you say algo i gave takes more time to debug.. complexity of given algo is O(n) and complexity of algo i gave is O(lg(n))....

      modified on Wednesday, March 3, 2010 10:37 PM

      L 1 Reply Last reply
      0
      • C chevu

        it might have a syntax error but you can do it this way.. you can refer algorithm by corman... n compare to given algo for (int i = 0; i < 18; i++) { tenE18 *= 10; } this one will run for 18times.. for debuging also you have to go through this loop 18 times... then how can you say algo i gave takes more time to debug.. complexity of given algo is O(n) and complexity of algo i gave is O(lg(n))....

        modified on Wednesday, March 3, 2010 10:37 PM

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

        chevu wrote:

        how can you say algo i gave takes more time to debug.. complexity of given algo is O(n)

        O(n) and O(lg(n)) apply to execution time, not debugging time. There are no formulas for debugging time; it depends on number of statements, decision points, readability of code, and initial number of bugs. Your code has more than 5 bugs, it will take you lots of time to find all of them. I suggest you try and fix and run it until the result is correct. :|

        Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


        I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


        J 1 Reply Last reply
        0
        • J johannesnestler

          yea - it was even hard for me to check his crazy code - lol. There is some resistence to execute such a thing - :)

          C Offline
          C Offline
          chevu
          wrote on last edited by
          #17

          sorry i messed up with code... This one is correct code

          decimal res = 10;
          decimal multi = 10;
          decimal rem = 1;
          int pow = 18;//For pow 0 you can directly return with 0

          while(pow > 1)
          {
          res *= res;
          rem *= (pow%2)? multi:1;
          pow /= 2;
          }
          res *= rem;

          L L 2 Replies Last reply
          0
          • C chevu

            sorry i messed up with code... This one is correct code

            decimal res = 10;
            decimal multi = 10;
            decimal rem = 1;
            int pow = 18;//For pow 0 you can directly return with 0

            while(pow > 1)
            {
            res *= res;
            rem *= (pow%2)? multi:1;
            pow /= 2;
            }
            res *= rem;

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

            chevu wrote:

            This one is correct code

            wrong again: 1. the result for pow=18 is wrong. 2. pow=5 and pow=6 give the same result??? I think you have abundantly proven now that your code has high debugging complexity. :(

            Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


            I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


            C 1 Reply Last reply
            0
            • L Luc Pattyn

              chevu wrote:

              This one is correct code

              wrong again: 1. the result for pow=18 is wrong. 2. pow=5 and pow=6 give the same result??? I think you have abundantly proven now that your code has high debugging complexity. :(

              Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


              I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


              C Offline
              C Offline
              chevu
              wrote on last edited by
              #19

              sorry dude... i had really forget to check till 18... coz of odd even cases that code will fail... I knw you people are getting irritated by now, but you can check this code

              double pow(long long a, long long b)
              {
              if(b == 0)
              return 1.0;
              else if(b == 1)
              return a;
              else if(b%2 == 0)
              return pow(a*a,b/2);
              else
              return a* pow(a*a,b/2);
              }

              i have tested this code upto long long limits...

              S J 2 Replies Last reply
              0
              • C chevu

                sorry dude... i had really forget to check till 18... coz of odd even cases that code will fail... I knw you people are getting irritated by now, but you can check this code

                double pow(long long a, long long b)
                {
                if(b == 0)
                return 1.0;
                else if(b == 1)
                return a;
                else if(b%2 == 0)
                return pow(a*a,b/2);
                else
                return a* pow(a*a,b/2);
                }

                i have tested this code upto long long limits...

                S Offline
                S Offline
                Stanciu Vlad
                wrote on last edited by
                #20

                Recursive functions brings color in life :-D

                I have no smart signature yet...

                1 Reply Last reply
                0
                • C chevu

                  sorry dude... i had really forget to check till 18... coz of odd even cases that code will fail... I knw you people are getting irritated by now, but you can check this code

                  double pow(long long a, long long b)
                  {
                  if(b == 0)
                  return 1.0;
                  else if(b == 1)
                  return a;
                  else if(b%2 == 0)
                  return pow(a*a,b/2);
                  else
                  return a* pow(a*a,b/2);
                  }

                  i have tested this code upto long long limits...

                  J Offline
                  J Offline
                  J4amieC
                  wrote on last edited by
                  #21

                  chevu wrote:

                  long long a

                  If I were a canadian, thats how I would describe this thread.

                  modified on Thursday, March 4, 2010 8:11 AM

                  C 1 Reply Last reply
                  0
                  • J J4amieC

                    chevu wrote:

                    long long a

                    If I were a canadian, thats how I would describe this thread.

                    modified on Thursday, March 4, 2010 8:11 AM

                    C Offline
                    C Offline
                    chevu
                    wrote on last edited by
                    #22

                    what kind of comment was that?

                    J 1 Reply Last reply
                    0
                    • C chevu

                      what kind of comment was that?

                      J Offline
                      J Offline
                      J4amieC
                      wrote on last edited by
                      #23

                      Erm, a half-assed joke, you douche.

                      1 Reply Last reply
                      0
                      • L Luc Pattyn

                        chevu wrote:

                        how can you say algo i gave takes more time to debug.. complexity of given algo is O(n)

                        O(n) and O(lg(n)) apply to execution time, not debugging time. There are no formulas for debugging time; it depends on number of statements, decision points, readability of code, and initial number of bugs. Your code has more than 5 bugs, it will take you lots of time to find all of them. I suggest you try and fix and run it until the result is correct. :|

                        Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                        I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                        J Offline
                        J Offline
                        johannesnestler
                        wrote on last edited by
                        #24

                        thank you for answering to chevu - he didn't get the hint - "debug time" :rose:

                        1 Reply Last reply
                        0
                        • C chevu

                          sorry i messed up with code... This one is correct code

                          decimal res = 10;
                          decimal multi = 10;
                          decimal rem = 1;
                          int pow = 18;//For pow 0 you can directly return with 0

                          while(pow > 1)
                          {
                          res *= res;
                          rem *= (pow%2)? multi:1;
                          pow /= 2;
                          }
                          res *= rem;

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

                          Here's how:

                              static decimal pow(decimal x, **u**int n)
                              {
                                  decimal result = 1;
                                  while (n > 0)
                                  {
                                      if ((n & 1) == 1)
                                      {
                                          result \*= x;
                                      }
                                      n >>= 1;
                                      if (n == 0)
                                          break;   //not nice, but needed in case x\*x overflow on the last step
                                      x \*= x;
                                  }
                                  return result;
                              }
                          

                          Good luck! ok so it's not the best possible code, I just hacked it together, but it works (tested)

                          modified on Friday, March 5, 2010 11:40 AM

                          L 1 Reply Last reply
                          0
                          • L Lost User

                            Here's how:

                                static decimal pow(decimal x, **u**int n)
                                {
                                    decimal result = 1;
                                    while (n > 0)
                                    {
                                        if ((n & 1) == 1)
                                        {
                                            result \*= x;
                                        }
                                        n >>= 1;
                                        if (n == 0)
                                            break;   //not nice, but needed in case x\*x overflow on the last step
                                        x \*= x;
                                    }
                                    return result;
                                }
                            

                            Good luck! ok so it's not the best possible code, I just hacked it together, but it works (tested)

                            modified on Friday, March 5, 2010 11:40 AM

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

                            harold aptroot wrote:

                            (tested)

                            that is unacceptable. This is the Coding Horrors forum after all. You're expected to publish something that is completely wrong, yet claim it is correct. :)

                            Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                            I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                            L 1 Reply Last reply
                            0
                            • L Luc Pattyn

                              harold aptroot wrote:

                              (tested)

                              that is unacceptable. This is the Coding Horrors forum after all. You're expected to publish something that is completely wrong, yet claim it is correct. :)

                              Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                              I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


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

                              Oops! Sorry :)

                              L 1 Reply Last reply
                              0
                              • L Lost User

                                Oops! Sorry :)

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

                                No problem. Anyway, it fails for negative n. :)

                                Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                                I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                                L 1 Reply Last reply
                                0
                                • L Luc Pattyn

                                  No problem. Anyway, it fails for negative n. :)

                                  Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                                  I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


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

                                  It's not supposed to work for negative n anyway

                                  L 1 Reply Last reply
                                  0
                                  • L Lost User

                                    It's not supposed to work for negative n anyway

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

                                    I didn't see any specs; you could have tested and thrown an InvalidArgumentException; or made the second parameter a uint. [EDIT]Negative exponents result in divisions, which for integers tend to yield either 0 or 1 depending on the value of a.[/EDIT] :)

                                    Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                                    I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


                                    L 1 Reply Last reply
                                    0
                                    • L Luc Pattyn

                                      I didn't see any specs; you could have tested and thrown an InvalidArgumentException; or made the second parameter a uint. [EDIT]Negative exponents result in divisions, which for integers tend to yield either 0 or 1 depending on the value of a.[/EDIT] :)

                                      Luc Pattyn [Forum Guidelines] [Why QA sucks] [My Articles]


                                      I only read code that is properly formatted, adding PRE tags is the easiest way to obtain that.


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

                                      Is that really necessary..? Fortunately adding just 1 letter of code takes the problem away.

                                      1 Reply Last reply
                                      0
                                      • A ArchimaX

                                        This is an excerpt from some sample code provided in the documentation for an EFT interface

                                        decimal divider;
                                        // we need 10^18, but Math.Pow does not support decimal
                                        // types and decimal does not provide a power function
                                        divider = 10*10*10;
                                        divider = Decimal.Multiply(divider,10*10*10*10*10);
                                        divider = Decimal.Multiply(divider,10*10*10*10*10);
                                        divider = Decimal.Multiply(divider,10*10*10*10*10);

                                        Blows my mind :-)

                                        R Offline
                                        R Offline
                                        Rob Grainger
                                        wrote on last edited by
                                        #32

                                        Not sure a cast is the best approach here - decimal types are OK for currency and other situations where accuracy is critical. Floating point types can introduce rounding errors - it all depends how the value is used. Best solution I've seen in the comments is 1E18M, but really 1E19M may be better ;-)

                                        A 1 Reply Last reply
                                        0
                                        • R Rob Grainger

                                          Not sure a cast is the best approach here - decimal types are OK for currency and other situations where accuracy is critical. Floating point types can introduce rounding errors - it all depends how the value is used. Best solution I've seen in the comments is 1E18M, but really 1E19M may be better ;-)

                                          A Offline
                                          A Offline
                                          Avi Berger
                                          wrote on last edited by
                                          #33

                                          Yes! I'm sorry I could only give you one five. When the problem domain calls for decimal calculations rather than floating point, casting from a floating point type would be a greater horror.

                                          Please do not read this signature.

                                          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