# Check range for power function

3 views (last 30 days)
Jogger on 14 Sep 2021
Commented: Jogger on 16 Sep 2021
I am looking for a unit test vectors which checks the range of input values for power function so that I can implement equivalent of C type in fix point
A = fi([1:2^5/32:2^5],0,32); % A > 0, so it starting with lowest positive fraction value
B = fi([-2:1e-2:2],1,32);
% C = power(A,B) % seeking help here for C type power implementation but
% gettting error
% % Error using fixed.internal.power.validateK (line 13)
% % Exponent input to 'power' must be a real scalar and the value must be a non-negative integer.
% %
% % Error in fixed.internal.power.powImpl>validateInputs (line 39)
% % fixed.internal.power.validateK(k);
% %
% % Error in fixed.internal.power.powImpl (line 9)
% % validateInputs(a, k);
% %
% % Error in .^ (line 32)
% % y = fixed.internal.power.powImpl(a, k);
figure(100);
A = [1:32];
B = [-2:2];
hold on; grid on;
plot(power(A(1),B(1:end)),'r-.');
plot(power(A(2),B(1:end)),'g-.');
plot(power(A(3),B(1:end)),'b-.');
plot(power(A(4),B(1:end)),'m-.');
%.
%.
%.
%.
plot(power(A(32),B(1:end)),'k-.','linewidth', 2.0);

Walter Roberson on 14 Sep 2021
When you use fi, the power must be a positive integer scalar.
Also, log(A) does not appear to be supported so you cannot use the usual exp(log(A) .* B)
You will need to implement your own fractional power, perhaps using a CORDIC method.
Jogger on 16 Sep 2021
I could see following case for computing the power with base and exponent condition
A is integer and B is exponent
if A < 0 && B < 0
C = power(A,B);
elseif A > 0 && B < 0
C = power(A,B);
elseif A == 0 && B < 0
C = power(A,B);
elseif A > 0 && B == 0
C = power(A,B);
elseif A > 0 && B > 0
C = power(A,B);
end

R2021a

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!