POV-Ray : Newsgroups : povray.programming : solving polynomials Server Time: 9 Dec 2018 21:48:46 GMT
  solving polynomials (Message 1 to 5 of 5)  
From: robfi680
Subject: solving polynomials
Date: 20 Oct 2016 07:40:00
Message: <web.580874a6f9e539ccf4af9d600@news.povray.org>
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;


Post a reply to this message

From: Le Forgeron
Subject: Re: solving polynomials
Date: 20 Oct 2016 18:02:44
Message: <580906c4@news.povray.org>
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.


Post a reply to this message

From: Le Forgeron
Subject: Re: solving polynomials
Date: 20 Oct 2016 18: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

From: clipka
Subject: Re: solving polynomials
Date: 20 Oct 2016 22:07:00
Message: <58094004@news.povray.org>
Am 20.10.2016 um 20:13 schrieb Le_Forgeron:

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

Dang. I think it indeed isn't.


Post a reply to this message

From: Cousin Ricky
Subject: Re: solving polynomials
Date: 22 Oct 2016 04:15:01
Message: <web.580ae75eb6ddb1823750ad290@news.povray.org>
Le_Forgeron <jgr### [at] freefr> wrote:
> Now, it only occurs for 5th and more order polynomial, something that is
> rarely seen.

I've used 8th order in the past, and there's a significant chance that I will
again in the future.


Post a reply to this message

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