|
|
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))
>> {
>> Thread->Stats()[Roots_Eliminated]++;
>>
>> 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;
Post a reply to this message
|
|