Olivier Ramare on Sun, 25 May 2008 18:49:24 +0200


[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]

Erreur de segmentation ???


Dear all,

 I join a script than I want to run with gp. The output is, after some time
(around an hour, I think) :
-------------------------------------------------------------------------
/bin/bash: line 1: 3973 Erreur de segmentation env TERM=emacs PAGER=cat LINES=1000 COLUMNS=118 /usr/bin/gp -s 100000000 -p 10000000 -emacs
-------------------------------------------------------------------------

When I use  /usr/bin/gp directly, the same segfault appears, at
the same point. In two days I'll be able to run it on a different machine.

Best,
Amities,
              Olivier

If you need, I can get more informations; just tell me how :-)
(I doubt a simple use of gdb would suffice).

--------------------------------------------------------------------------------------------
   OUTPUT
--------------------------------------------------------------------------------------------
Appele avec : /usr/bin/gp -s 100000000 -p 10000000 -emacs

Reading GPRC: /etc/gprc ...Done.

GP/PARI CALCULATOR Version 2.3.3 (released) i486 running linux (ix86/GMP-4.2.2 kernel) 32-bit version compiled: Jan 21 2008, gcc-4.2.3 20080114 (prerelease) (Debian 4.2.2-7) (readline v5.2 enabled, extended help available)

Copyright (C) 2000-2006 The PARI Group

PARI/GP is free software, covered by the GNU General Public License, and comes WITHOUT ANY WARRANTY WHATSOEVER.

Type ? for help, \q to quit.
Type ?12 for how to get moral (and possibly technical) support.

parisize = 100000000, primelimit = 10000000
? \r /home/ramare/tex/Articles/ZetaLocal/Diff.gp
? Walk(2,3)
[Walk] Inspecting [0.2000000000000000000000000000, 0.2000000000000000000000000000]
[Walk]            Y = 0.1000000000000000000000000000

[... lots of output ...]

[Walk] Inspecting [0.2280000000000000000000000000, 2.272000000000000000000000000]
[Walk]            Y = 0.1000000000000000000000000000
[Walk]            Y = 0.1040000000000000000000000000
[Walk]            Y = 0.1080000000000000000000000000
[Walk]            Y = 0.1120000000000000000000000000
[Walk]            Y = 0.1160000000000000000000000000
/bin/bash: line 1: 3973 Erreur de segmentation env TERM=emacs PAGER=cat LINES=1000 COLUMNS=118 /usr/bin/gp -s 100000000 -p 10000000 -emacs
--------------------------------------------------------------------------------------------
    SCRIPT
--------------------------------------------------------------------------------------------
{DiscreteValue(mygamma, bigY, p ,etaa, lambdaa, verbose=1)=
  local(bigD = length(mygamma), res = 0.0, normalization = 0.0,
        mybiggamma = vector(bigD));

  /* Beware !! In the paper, mybiggamma goes from
     index 0 to D while mygamma goes from 0 to D-1;
     Here mygamma goes from 1 to D and so does mybiggamma:
     this is shifted by one, and mybiggamma[1] = 0 */


  if(verbose == 1,
     if(etaa > 1/2-0.00001,
        print("etaa is too large (should be <=  1/2-0.00001)");
        return(0),);
     if(bigY >= 1/2,
        print("bigY is too large (should be <  1/2)");
        return(0),);,);
for(d = 1, bigD, normalization += mygamma[d]);
  for(d = 1, bigD, mygamma[d] = bigD*mygamma[d]/normalization);
  mybiggamma[1] = 0;
  for(d = 2, bigD, mybiggamma[d] = mygamma[d-1]+mybiggamma[d-1]);
  if(verbose == 1,
     print("[DiscreteValue, 0] ", (mybiggamma[bigD]+mygamma[bigD])/bigD),);
  /* printed value should be 1 */

  res = (lambdaa*(1-2*bigY)-1+2*etaa)/(lambdaa*(1-2*bigY)+1-2*etaa)
        *(1-2*bigY)/2;
  if(verbose == 1,
     print("[DiscreteValue, 1] ", res),);
  res += bigY*(p^2+2*p-1)/(p-1)^2;
  if(verbose == 1,
     print("[DiscreteValue, 2] ", res),);
  for(d = 1, bigD,
     res += mygamma[bigD-d+1]*bigY^2/bigD/(p-1)^2
           *(2*lambdaa/etaa*mygamma[bigD-d+1]
             -(p^2-1)*mybiggamma[d]
             -(p^2-1)/2/bigD*mygamma[d]));
  if(verbose == 1,
     print("[DiscreteValue, 3] ", res),);
  for(d = 1, bigD,
     res += -mygamma[bigD-d+1]/mygamma[d]*2/(p-1)^3
           *((lambdaa/etaa)*bigY*mygamma[bigD-d+1]+p)^2
           *log((1+bigY*(lambdaa/etaa*mygamma[bigD-d+1]+(p-1)*mybiggamma[d]
                        +(p-1)*mygamma[d]/bigD))
                /(1+bigY*(lambdaa/etaa*mygamma[bigD-d+1]
                          +(p-1)*mybiggamma[d]))));
  if(verbose == 1,
     print("[DiscreteValue, 4] ", res),);

  if(verbose == 1,
     if(res<0,
        print(" Lambda(p) <= ", majsize(p ,etaa, lambdaa)),
        print("No luck!")),);
  return(res)}

{majsize(p ,etaa, lambdaa) = (1-etaa)/lambdaa/exp(Euler)*((p+1)/4-1/2)}

{Walk(bigD, p)=
local(minslope = 0.2, maxslope = 3.0, nbstepslope = 100, /* minslope >0 */
        /* Donc mygamma est un vecteur de longueur bigD
           et dont chaque composante varie entre minslope et
           maxslope par increment de stepslope. */
        stepslope = (maxslope - minslope)/nbstepslope,
        minindices = vector(bigD),
        maxindices = vector(bigD, k, nbstepslope),
        mygamma = vector(bigD),
        minbigY = 0.1, maxbigY = 0.5, nbstepsbigY = 100,
        stepbigY = (maxbigY - minbigY)/nbstepsbigY,
        bigY, howmanyfound, foundnewone,
        stepetaa = 0.001, etaa, foundonelambdaa, foundoneetaa,
        hasfoundalambdaa,
        steplambdaa = 0.001, lambdaa,
        bestoldvalue = [vector(bigD),0,p,0,0, p], res, majo);
  /* bestoldvalue has shape
     [mygamma, bigY, p ,etaa, lambdaa, majo] */

  forvec(myindex = vector(bigD, k, [minindices[k], maxindices[k]]),
         for(d = 1, bigD, mygamma[d] = minslope+myindex[d]*stepslope);
         print("[Walk] Inspecting ", mygamma);
         bigY = minbigY;
         hasfoundalambdaa = 0;
         howmanyfound = 0; /* if bigY finds no *new* results
and is the second one like that, skip gamma */
         while( bigY <=  maxbigY,
               print("[Walk]            Y = ", bigY);
               foundoneetaa = 0;
               etaa = stepetaa;
               foundnewone = 0;
               while( etaa <= 0.3,
                     lambdaa = 0.7;
                     foundonelambdaa = 0;
                     while( lambdaa <= 1,
res = DiscreteValue(mygamma, bigY, p ,etaa, lambdaa, 0);
                           if(res < 0,
                              foundonelambdaa = 1;
                              foundoneetaa = 1;
                              majo = majsize(p ,etaa, lambdaa);
                              if(majo < bestoldvalue[6],
for(d = 1, bigD, bestoldvalue[1][d] = mygamma[d]);
                                 bestoldvalue[2] = bigY;
                                 bestoldvalue[4] = etaa;
                                 bestoldvalue[5] = lambdaa;
                                 bestoldvalue[6] = majo;
                                 print("       Found: ", majo);
                                 foundnewone = 1;
                                 ,),
lambdaa += 1;);/* On sort des que lambdaa est trop gros */
                           lambdaa += steplambdaa;);
if(foundonelambdaa == 0, etaa += 1,);/* On sort des que etaa est trop gros */
                     etaa += stepetaa;);
               if((foundoneetaa == 0)
&&(hasfoundalambdaa == 1), bigY += 1,); /* ?? On sort des que bigY est trop gros ?? */
               if(foundoneetaa == 1, hasfoundalambdaa = 1,);
               if(foundnewone == 0,  howmanyfound += 1,);
               \\if(howmanyfound == 2, bigY+= 1,);
               bigY += stepbigY;););
  return(bestoldvalue);
}
-----------------------------------------------------------------------------------