Check range for power function

4 visualizzazioni (ultimi 30 giorni)
Life is Wonderful
Life is Wonderful il 14 Set 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);

Risposte (1)

Walter Roberson
Walter Roberson il 14 Set 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.
  3 Commenti
Life is Wonderful
Life is Wonderful il 14 Set 2021
Modificato: Life is Wonderful il 14 Set 2021
y = cordiccexp(log(1) .* -2);
y
y = 1.0000 - 0.0000i
y = power(2,cordiccexp(log(2) .* -2))
y = 0.8820 - 0.7153i
z = power(2 ,-2)
z = 0.2500
y = nthroot(1,-2);power(2,y) % IS THIS YOUR INTERPRETATION OWN FRACTIONAL POWER
ans = 2
Life is Wonderful
Life is Wonderful il 16 Set 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

Accedi per commentare.

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Tag

Prodotti


Release

R2021a

Community Treasure Hunt

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

Start Hunting!

Translated by