[Scilab-users] display of complex/not real numbers, again

Samuel Gougeon sgougeon at free.fr
Fri Sep 13 12:45:21 CEST 2019


Hello,

To me, as already claimed there 
<https://bugzilla.scilab.org/show_bug.cgi?id=15781#c2>, it's clear that, 
for a complex-encoded number, not displaying its null imaginary part is 
a bug, and the proposed patch is clearly welcome as well.

Another regression very close to this one, but with real numbers 
display, would deserve the same care :
Scilab 5:
-->[1e30 1e-30]
  ans  =
     1.000D+30    1.000D-30

Scilab 6:
--> [1e30 1e-30]
  ans  =
    1.000D+30   0.

So, very small numbers are reduced to strict 0...
This is a bad implementation of the variable format mode. The Scilab 5 
one was correct, at least on this point.

Best regards
Samuel


Le 12/09/2019 à 10:26, Stéphane Mottelet a écrit :
> Hello all,
>
> The subject has been already discussed a lot but I would like it to be 
> discussed again because I now have a real rationale to promote a 
> change in the way complex numbers with small imaginary part are 
> displayed.
>
> I don't know if some of you were aware of the clever technique of 
> complex-step derivative approximation, but until yesterday I was not 
> (see e.g. 
> http://mdolab.engin.umich.edu/sites/default/files/Martins2003CSD.pdf). 
> Roughly speaking, using the extension of a real function x->f(x) to 
> the complex plane allows to compute an approximation of the derivative 
> f'(x0) at a real x0 without using a substraction, like in the central 
> difference formula (f(x0+h)-f(x0-h))/2/h which is subject to 
> substractive cancelation when h is small. In Scilab most operators and 
> elementary functions are already complex-aware so this is easy to 
> illustrate the technique. For example let us approximate the 
> derivative of x->cos(x) at x=%pi/4, first with the central difference 
> formula, then with the complex step technique:
>
> --> format("e",24)
>
> --> h=%eps/128, x0=%pi/4
>  h  =
>
>    1.73472347597680709D-18
>
>  x0  =
>
>    7.85398163397448279D-01
>
>
> --> (cos(x0+h)-cos(x0-h))/2/h
>  ans  =
>
>    0.00000000000000000D+00
>
>
> --> imag(cos(x0+%i*h))/h
>  ans  =
>
>   -7.07106781186547462D-01
>
>
> --> -sin(x0)
>  ans  =
>
>   -7.07106781186547462D-01
>
> You can see the pathological approximation with central difference 
> formula and the perfect (up to relative machine precision) 
> approximation of complex-step formula.
>
> However, the following is a pity:
>
>
> --> cos(x0+%i*h)
>  ans  =
>
>    7.07106781186547573D-01
>
> We cannot see the imaginary part although seeing the latter is 
> fundamental in the complex-step technique. We have to force the 
> display like this, and frankly I don't like having to do that with my 
> students:
>
> --> imag(cos(x0+%i*h))
>  ans  =
>
>   -1.22663473334669916D-18
>
> I hope that you will find that this example is a good rationale to 
> change the default display of Scilab. To feed the discussion, here is 
> how Matlab displays things, without having to change the default 
> settings:
>
>
> >> h=eps/128, x0=pi/4
> h =
>    1.7347e-18
> x0 =
>     0.7854
>
> >> (cos(x0+h)-cos(x0-h))/2/h
> ans =
>      0
>
> >> cos(x0+i*h)
> ans =
>    0.7071 - 0.0000i
>
> >> imag(cos(x0+i*h))/h
> ans =
>    -0.7071
>
> >> -sin(x0)
> ans =
>    -0.7071
>
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.scilab.org/pipermail/users/attachments/20190913/3f83f0ca/attachment.htm>


More information about the users mailing list