Remove negative 0 previous solution does not work in this context

2 visualizzazioni (ultimi 30 giorni)
Attempting to use the solution which removes negative 0 as shown by Rick here:
In does not seem to work for me in this context why?
exp_phase_shift is a 1x8
I can see element 7 a small value of something to the -16
I am able to use this solution:
smallValues = abs(exp_phase_shift_re) < 0.000000001;
exp_phase_shift_re(smallValues) = 0;
Want to know why:
A(A==0)=0;
Does not work
Thanks
Mike

Risposta accettata

Corey McDowell
Corey McDowell il 29 Giu 2022
the equality operator is not a very good fit for floating point numbers. you should instead specify a tolerance
% random values in the range (a,b)
a = 0;
b = 2E-5;
A = a + (b-a)*rand(1,10)
A = 1×10
1.0e-04 * 0.1177 0.0540 0.0583 0.0653 0.1559 0.1669 0.1893 0.1672 0.1605 0.1082
% this is the solution you want
tol = 1E-5;
A(abs(A-0) < tol) = 0
A = 1×10
1.0e-04 * 0.1177 0 0 0 0.1559 0.1669 0.1893 0.1672 0.1605 0.1082
  1 Commento
Corey McDowell
Corey McDowell il 29 Giu 2022
to be clearer, the equality operator does not work because it does not have a tolerance, 1E-15 is a different value from 0, so they are not equal. the solution you reference is specifically talking about signed 0 which is arithmatically identical to a 0, but symbolically is a distinction between the two onesided limits as they are approach 0

Accedi per commentare.

Più risposte (0)

Prodotti


Release

R2017a

Community Treasure Hunt

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

Start Hunting!

Translated by