Changeset e76d8cb in git for libpolys/coeffs/shortfl.cc


Ignore:
Timestamp:
Feb 20, 2013, 10:38:38 AM (10 years ago)
Author:
Yue Ren <ren@…>
Branches:
(u'spielwiese', '8d54773d6c9e2f1d2593a28bc68b7eeab54ed529')
Children:
ce537eb3f2484e9e9a7a4ce023fcf855a68f301c
Parents:
7c537a47dd975a6046f786932a51b53e7595d43b
git-author:
Yue Ren <ren@mathematik.uni-kl.de>2013-02-20 10:38:38+01:00
git-committer:
Yue Ren <ren@mathematik.uni-kl.de>2013-02-20 10:53:39+01:00
Message:
fix: nonexistant overflow during numbers->float throwing error
File:
1 edited

Legend:

Unmodified
Added
Removed
  • libpolys/coeffs/shortfl.cc

    r7c537a4 re76d8cb  
    420420  /* read out the enumerator */
    421421  mpz_ptr z=GET_NOM(from);
    422   if(mpz_size1(z)>4)
    423   {
    424     WerrorS("float overflow");
    425     return nf(0.0).N();
    426   }
     422  int i = mpz_size1(z);
    427423  mpf_t e;
    428424  mpf_init(e);
     
    432428  if(IS_INT(from))
    433429  {
     430    if(i>4)
     431    {
     432      WerrorS("float overflow");
     433      return nf(0.0).N();
     434    }
    434435    double basis;
    435436    signed long int exp;
     
    442443  /* else read out the denominator */
    443444  mpz_ptr n = GET_DENOM(from);
    444   if(mpz_size1(n)>4)
     445  int j = mpz_size1(n);
     446  if(j-i>4)
    445447  {
    446448    WerrorS("float overflow");
     
    466468  return nf(f).N();
    467469}
     470
     471// old version:
     472// number nrMapQ(number from, const coeffs aRing, const coeffs r)
     473// {
     474// /* in longrat.h
     475// #define SR_INT    1
     476// #define mpz_size1(A) (ABS((A)->_mp_size))
     477// */
     478// #define SR_HDL(A) ((long)(A))
     479// #define mpz_isNeg(A) ((A)->_mp_size<0)
     480// #define mpz_limb_size(A) ((A)->_mp_size)
     481// #define mpz_limb_d(A) ((A)->_mp_d)
     482// #define MPZ_DIV(A,B,C) mpz_tdiv_q((A),(B),(C))
     483// #define IS_INT(A) ((A)->s==3)
     484// #define IS_IMM(A) (SR_HDL(A)&SR_INT)
     485// #define GET_NOM(A) ((A)->z)
     486// #define GET_DENOM(A) ((A)->n)
     487// #define MPZ_INIT mpz_init
     488// #define MPZ_CLEAR mpz_clear
     489
     490//   assume( getCoeffType(r) == ID );
     491//   assume( getCoeffType(aRing) == n_Q );
     492
     493//   mpz_t h;
     494//   mpz_ptr g,z,n;
     495//   int i,j,t,s;
     496//   float ba,rr,rn,y;
     497
     498//   if (IS_IMM(from))
     499//     return nf((float)nlInt(from,NULL /* dummy for nlInt*/)).N();
     500//   z=GET_NOM(from);
     501//   s=0X10000;
     502//   ba=(float)s;
     503//   ba*=ba;
     504//   rr=0.0;
     505//   i=mpz_size1(z);
     506//   if(IS_INT(from))
     507//   {
     508//     if(i>4)
     509//     {
     510//       WerrorS("float overflow");
     511//       return nf(rr).N();
     512//     }
     513//     i--;
     514//     rr=(float)mpz_limb_d(z)[i];
     515//     while(i>0)
     516//     {
     517//       i--;
     518//       y=(float)mpz_limb_d(z)[i];
     519//       rr=rr*ba+y;
     520//     }
     521//     if(mpz_isNeg(z))
     522//       rr=-rr;
     523//     return nf(rr).N();
     524//   }
     525//   n=GET_DENOM(from);
     526//   j=s=mpz_limb_size(n);
     527//   if(j>i)
     528//   {
     529//     g=n; n=z; z=g;
     530//     t=j; j=i; i=t;
     531//   }
     532//   t=i-j;
     533//   if(t>4)
     534//   {
     535//     if(j==s)
     536//       WerrorS("float overflow");
     537//     return nf(rr).N();
     538//   }
     539//   if(t>1)
     540//   {
     541//     g=h;
     542//     MPZ_INIT(g);
     543//     MPZ_DIV(g,z,n);
     544//     t=mpz_size1(g);
     545//     if(t>4)
     546//     {
     547//       MPZ_CLEAR(g);
     548//       if(j==s)
     549//         WerrorS("float overflow");
     550//       return nf(rr).N();
     551//     }
     552//     t--;
     553//     rr=(float)mpz_limb_d(g)[t];
     554//     while(t)
     555//     {
     556//       t--;
     557//       y=(float)mpz_limb_d(g)[t];
     558//       rr=rr*ba+y;
     559//     }
     560//     MPZ_CLEAR(g);
     561//     if(j!=s)
     562//       rr=1.0/rr;
     563//     if(mpz_isNeg(z))
     564//       rr=-rr;
     565//     return nf(rr).N();
     566//   }
     567//   rn=(float)mpz_limb_d(n)[j-1];
     568//   rr=(float)mpz_limb_d(z)[i-1];
     569//   if(j>1)
     570//   {
     571//     rn=rn*ba+(float)mpz_limb_d(n)[j-2];
     572//     rr=rr*ba+(float)mpz_limb_d(z)[i-2];
     573//     i--;
     574//   }
     575//   if(t!=0)
     576//     rr=rr*ba+(float)mpz_limb_d(z)[i-2];
     577//   if(j==s)
     578//     rr=rr/rn;
     579//   else
     580//     rr=rn/rr;
     581//   if(mpz_isNeg(z))
     582//     rr=-rr;
     583//   return nf(rr).N();
     584// }
    468585
    469586nMapFunc nrSetMap(const coeffs src, const coeffs dst)
Note: See TracChangeset for help on using the changeset viewer.