POV-Ray : Newsgroups : povray.programming : solving polynomials : Re: solving polynomials Server Time19 Sep 2021 16:44:46 EDT (-0400)
 Re: solving polynomials
 From: Le Forgeron Date: 20 Oct 2016 14:13:09 Message: <58090935\$1@news.povray.org>
Le 20/10/2016 à 20:02, Le_Forgeron a écrit :
> Le 20/10/2016 à 09:39, robfi680 a écrit :
>> I was just looking at the source code for POVRay 3.7 for solving polynomials. In
>> the default case for Solve_Polynomial it looks to me like it solves the
>> polynomial twice for orders higher than four when a root is eliminated. I am
>> trying to understand the code for my own use. Could there be a break statement
>> missing ? Otherwise why does it solve for order n-1 and then n ?
>>
>> The code looks like:
>>   default:
>>
>>    if (epsilon > 0.0)
>>    {
>>     if ((c[n-1] != 0.0) && (fabs(c[n]/c[n-1]) < epsilon))
>>     {
>>
>>      roots = polysolve(n-1, c, r);
>>     }
>>    }
>>
>>    /* Solve n-th order polynomial. */
>>
>>    roots = polysolve(n, c, r);
>>
>>    break;
>>
>>
>>
>
> The interesting part is that master branch is already corrected : yes, a
> break is/was missing.
>
> Now, it only occurs for 5th and more order polynomial, something that is
> rarely seen.
>
> The correction was done on 8th September 2016, found by static code
> analysis.
>

On second look, I'm not even sure the break is at the right place...
Christoph ?

if (epsilon > 0.0)
{
if ((c[n-1] != 0.0) && (fabs(c[n]/c[n-1]) < epsilon))
{
stats[Roots_Eliminated]++;

roots = polysolve(n-1, c, r);
}

break;
}

/* Solve n-th order polynomial. */

roots = polysolve(n, c, r);

break;