[GiNaC-list] to_long() of an imaginary unit is 9

Richard B. Kreckel kreckel at in.terlu.de
Wed Apr 14 21:04:15 CEST 2021


Hi Vitaly,

On 14.04.21 13:55, Vitaly Magerya wrote:
> The result of it with GiNaC 1.7.8 (CLN 1.3.6) is:
> 
>     $ c++ -o example example.cpp -lginac -lcln && ./example
>     Numeric: I
>     .real(): 0
>     .imag(): 1
>     .numer(): I
>     .denom(): 1
>     .numer().to_long(): 9
>     .denom().to_long(): 1
>     .to_long(): 9
> 
> Seeing that the documentation contains this phrase:
> 
>     Both to_int()/to_long() and to_double() discard the imaginary
>     part of complex numbers.

Hmm, the manual also says that 'to_int()' and 'to_long()' only work when
the number they are applied on
 is an exact integer.
 You should do explicit checking.

> ... I'm guessing this is not the expected behavior.

According to this comment here
<https://www.ginac.de/reference/classGiNaC_1_1numeric.html#ad8c883c872e06a3573271940f05e4bf1>
it is intended.

> As a related question, is there any way to prevent parser from
> interpreting "I" as an imaginary unit? I'd like it to be just a variable.

Sorry, the constants are hard-wired in parser/parser.cpp.

  -richy.
-- 
Richard B. Kreckel
<https://in.terlu.de/~kreckel/>


More information about the GiNaC-list mailing list