46 if(rhs->get_string() !=
"")
49 <<
"the number representing the power cannot be a dimension ("
51 <<
"); it has to be unitless."
57 bool check_dimension(
false);
62 result->set_integer(
static_cast<integer_t>(pow(lhs->get_integer(), rhs->get_integer())));
63 check_dimension =
true;
68 result->set_decimal_number(pow(lhs->get_integer(), rhs->get_decimal_number()));
69 check_dimension =
true;
74 result->set_decimal_number(pow(lhs->get_decimal_number(), rhs->get_integer()));
75 check_dimension =
true;
80 result->set_decimal_number(pow(lhs->get_decimal_number(), rhs->get_decimal_number()));
81 check_dimension =
true;
86 result->set_decimal_number(pow(lhs->get_decimal_number(), rhs->get_integer()));
91 result->set_decimal_number(pow(lhs->get_decimal_number(), rhs->get_decimal_number()));
96 <<
"incompatible types between "
100 <<
" for operator '**'."
107 && lhs->get_string() !=
"")
113 the_power = rhs->get_integer();
120#pragma GCC diagnostic push
121#pragma GCC diagnostic ignored "-Wfloat-equal"
122 if(fractional_part != 0.0)
123#pragma GCC diagnostic pop
128 <<
"a number with a dimension only supports integers as their power (i.e. 3px ** 2 is fine, 3px ** 2.1 is not supported)."
132 the_power =
static_cast<integer_t>(integral_part);
137 <<
"a number with a dimension power zero cannot be calculated (i.e. 3px ** 0 = 1 what?)."
143 if(labs(the_power) > 100)
146 <<
"a number with a dimension power 101 or more would generate a very large string so we refuse it at this time. You may use unitless numbers instead."
167 the_power = labs(the_power);
168 for(
integer_t idx(0); idx < the_power; ++idx)
170 for(
auto d : org_dividend)
172 dividend.push_back(d);
174 for(
auto d : org_divisor)
176 divisor.push_back(d);