@@ -49,40 +49,40 @@ Number Semantics::pow(const Number& base, const Number& exp) {
4949 if (base == Number::INF || exp == Number::INF) {
5050 return Number::INF;
5151 }
52+ if (base == Number::ONE) {
53+ return 1 ; // 1^x is always 1
54+ }
55+ if (base == -1 ) {
56+ return exp.odd () ? -1 : 1 ; // (-1)^x
57+ }
5258 if (base == Number::ZERO) {
5359 if (Number::ZERO < exp) {
5460 return 0 ; // 0^(positive number)
55- } else if (exp == Number::ZERO) {
61+ }
62+ if (exp == Number::ZERO) {
5663 return 1 ; // 0^0
57- } else {
58- return Number::INF; // 0^(negative number)
5964 }
60- } else if (base == Number::ONE) {
61- return 1 ; // 1^x is always 1
62- } else if (base == -1 ) {
63- return exp.odd () ? -1 : 1 ; // (-1)^x
64- } else {
65- if (exp < Number::ZERO) {
66- return 0 ;
67- } else {
68- Number r = 1 ;
69- Number b = base;
70- Number e = exp;
71- while (r != Number::INF && e != Number::ZERO) {
72- if (e.odd ()) {
73- r = mul (r, b);
74- }
75- e = div (e, 2 );
76- if (e != Number::ZERO) {
77- b = mul (b, b);
78- if (b == Number::INF) {
79- r = Number::INF;
80- }
81- }
65+ return Number::INF; // 0^(negative number)
66+ }
67+ if (exp < Number::ZERO) {
68+ return 0 ;
69+ }
70+ Number r = 1 ;
71+ Number b = base;
72+ Number e = exp;
73+ while (r != Number::INF && e != Number::ZERO) {
74+ if (e.odd ()) {
75+ r = mul (r, b);
76+ }
77+ e = div (e, 2 );
78+ if (e != Number::ZERO) {
79+ b = mul (b, b);
80+ if (b == Number::INF) {
81+ r = Number::INF;
8282 }
83- return r;
8483 }
8584 }
85+ return r;
8686}
8787
8888Number Semantics::gcd (const Number& a, const Number& b) {
0 commit comments