POV-Ray : Newsgroups : povray.programming : solving polynomials : Re: solving polynomials Server Time
19 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))
>>     {
>>      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

Copyright 2003-2021 Persistence of Vision Raytracer Pty. Ltd.