Changeset 9118cc in git for libpolys/coeffs/ffields.cc


Ignore:
Timestamp:
Mar 20, 2018, 2:54:30 PM (6 years ago)
Author:
Hans Schoenemann <hannes@…>
Branches:
(u'spielwiese', 'fe61d9c35bf7c61f2b6cbf1b56e25e2f08d536cc')
Children:
65fb130c82c5b41756b646064fa062c3f6d16bf2
Parents:
3e8b644fceec8f73a275e8539c415a775f4aa015
Message:
fix: nfInt/nfWrite (for GP(p^n))
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/coeffs/ffields.cc

    r3e8b64 r9118cc  
    1010#include "misc/mylimits.h"
    1111#include "misc/sirandom.h"
     12#include "misc/prime.h"
    1213
    1314#include "reporter/reporter.h"
     
    237238* number -> int
    238239*/
    239 static long nfInt (number &n, const coeffs )
    240 {
    241   return (long)n;
     240static long nfInt (number &n, const coeffs r )
     241{
     242  unsigned short c=0;
     243  unsigned short nn=(unsigned short)(long)n;
     244  if (nn==r->m_nfCharQ) return 0;
     245  long i=1; /* 1==a^0 */
     246  while ((c!=nn)&&(i<r->m_nfCharQ))
     247  {
     248    c=r->m_nfPlus1Table[c];
     249    i++;
     250  }
     251  if (c==nn) return i;
     252  else       return 0;
    242253}
    243254
     
    403414  else
    404415  {
    405     StringAppendS(n_ParameterNames(r)[0]);
    406     if ((long)a!=1L)
    407     {
    408       StringAppend("^%d",(int)((long)a)); // long output!
     416    int i=1; /* 1==a^0 */
     417    unsigned short c=0;
     418    unsigned short nn=(unsigned short)(long)a;
     419    while ((c!=nn)&&(i<r->m_nfCharQ))
     420    {
     421      c=r->m_nfPlus1Table[c];
     422      i++;
     423    }
     424    if (c==nn) StringAppend("%d",i);
     425    else
     426    {
     427      StringAppendS(n_ParameterNames(r)[0]);
     428      if ((long)a!=1L)
     429      {
     430        StringAppend("^%d",(int)((long)a)); // long output!
     431      }
    409432    }
    410433  }
     
    425448  else
    426449  {
    427     StringAppendS(n_ParameterNames(r)[0]);
    428     if ((long)a!=1L)
    429     {
    430       StringAppend("%d",(int)((long)a));
     450    int i=1; /* 1==a^0 */
     451    unsigned short c=0;
     452    unsigned short nn=(unsigned short)(long)a;
     453    while ((c!=nn)&&(i<r->m_nfCharQ))
     454    {
     455      c=r->m_nfPlus1Table[c];
     456      i++;
     457    }
     458    if (c==nn) StringAppend("%d",i);
     459    else
     460    {
     461      StringAppendS(n_ParameterNames(r)[0]);
     462      if ((long)a!=1L)
     463      {
     464        StringAppend("%d",(int)((long)a));
     465      }
    431466    }
    432467  }
     
    571606{
    572607  //Print("GF(%d)\n",c);
    573   if ((c==r->m_nfCharQ)||(c==-r->m_nfCharQ))
     608  if ((c==r->m_nfCharQ)||(c== -r->m_nfCharQ))
    574609    /*this field is already set*/  return;
    575610  int i=0;
    576611
    577   while ((fftable[i]!=c) && (fftable[i]!=0))
    578     i++;
    579 
    580   if (fftable[i]==0)
    581   {
    582     // illegal GF-table size: c
    583     return;
     612  if ((c>255) ||(c!=IsPrime(c)))
     613  {
     614    while ((fftable[i]!=c) && (fftable[i]!=0))
     615      i++;
     616
     617    if (fftable[i]==0)
     618    {
     619      // illegal GF-table size: c
     620      return;
     621    }
    584622  }
    585623
Note: See TracChangeset for help on using the changeset viewer.