[CLN-list] [GiNaC-devel] evalf() on cube roots

Richard B. Kreckel kreckel at in.terlu.de
Sat Sep 21 18:00:28 CEST 2019


Hi,

This is a CLN topic. Let's take this thread to cln-list.

Your proposal seems to suggest that CLN pick another branch cut for
roots if a certain global flag is set.

I'm sceptical about introducing global flags which control the
computation in a way that results in very different numerical results -
it looks like calling for problems. Admitted, there are global flags
(cl_inhibit_floating_point_underflow and those dealing with I/O), and
rounding control is well known from IEEE754. But returning a complex
number which is far away from the conventional result in the complex
plane is a different thing. I'm not aware of any such flag in another
system; is there one?

I'ld like to hear what others think.

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

On 31.10.18 18:02, Jan Rheinländer wrote:
> Picking up this old thread...
> 
> I would like to submit a patch that allows choosing the convention for
> negative cube roots between the solution on the principal branch and the
> real-valued solution.
> 
> That is, in the cln library, file complex/transcendental/cl_C_expt_C.cc
> I would like to handle the following case separately:
> 
> y rational and y ratio m/n
> x rational and x < 0
> n odd
> 
> What about introducing a flag called (e.g.)
> cln::cl_odd_roots_of_rationals_real (similar to
> cln::cl_inhibit_floating_point_underflow)?
> 
> If the flag is false (default), the above case evaluates to exp(log(x) *
> y) as before
> 
> If the flag is true, it evaluates to (-1)^m * (-x)^(m/n)
> 
> Would such a patch be acceptable?
> 
> Greetings,
> 
> Jan Rheinländer
> 
> 
> Am 02.08.2015 um 21:55 schrieb Richard B. Kreckel:
>> On 08/02/2015 08:59 PM, Jan Rheinländer wrote:
>>>> There isn't. GiNaC, like almost all other systems, returns the solution
>>>> on the principal branch, compatible with exp(log(-1)/3).
>>> I suppose there is some excellent mathematical reason for this...
>> Actually, there isn't. Branch cuts are a matter of convention.
>> Nothing more but also nothing less.
>>
>>> but for
>>> me it means that I can't use GiNaC to verify Cardano's formula for a
>>> cubic function:
>>>
>>>> x = (-1 - sqrt(2))^(1/3) + (-1 + sqrt(2))^(1/3);
>>> (-1-sqrt(2))^(1/3)+(-1+sqrt(2))^(1/3)
>>>
>>>> evalf(x^3 + 3 * x + 2);
>>> 3.3544445609126528848+8.9073474964875349776*I
>>>
>>> Surely there must be a way to verify such a formula in GiNaC???
>> It should be straightforward to replace such rational expressions by the
>> form you want them to be in before calling evalf(), using techniques
>> such as these: <http://www.ginac.de/FAQ.html#advanced>
>>
>> Cheers
>>   -richy.
> 
> _______________________________________________
> GiNaC-devel mailing list
> GiNaC-devel at ginac.de
> https://www.cebix.net/mailman/listinfo/ginac-devel


More information about the CLN-list mailing list