Changeset 1072 in Sophya for trunk


Ignore:
Timestamp:
Jul 16, 2000, 1:28:19 AM (25 years ago)
Author:
ansari
Message:

protection conditionnelle DivElts par zero cmv 16/7/00

Location:
trunk/SophyaLib/TArray
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/SophyaLib/TArray/tarray.cc

    r1050 r1072  
    663663Divide two TArrays *this = (*this)/a
    664664\param fginv == true : Perfoms the inverse division (*this = a/(*this))
     665\param divzero == true : if a(i)==0. result is set to zero: (*this)(i)==0.
    665666*/
    666667template <class T>
    667 TArray<T>& TArray<T>::DivElt(const TArray<T>& a, bool fginv)
     668TArray<T>& TArray<T>::DivElt(const TArray<T>& a, bool fginv, bool divzero)
    668669{
    669670  if (NbDimensions() < 1)
     
    681682    pe = Data();
    682683    pea = a.Data();
    683     if (fginv)
    684       for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )  pe[k] = pea[ka]/pe[k];
    685     else
    686       for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )  pe[k] /= pea[ka] ;
     684    if(divzero) {
     685      if (fginv)
     686        for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )
     687          {if(pe[k]==(T)0) pe[k] = (T)0; else pe[k] = pea[ka]/pe[k];}
     688      else
     689        for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )
     690          {if(pea[k]==(T)0) pe[k] = (T)0; else pe[k] /= pea[ka] ;}
     691    } else {
     692      if (fginv)
     693        for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )  pe[k] = pea[ka]/pe[k];
     694      else
     695        for(k=0, ka=0;  k<maxx;  k+=step, ka+=stepa )  pe[k] /= pea[ka] ;
     696    }
    687697  }
    688698  else {    // Non regular data spacing ...
     
    695705      pe = mNDBlock.Begin()+Offset(ax,j);
    696706      pea = a.DataBlock().Begin()+a.Offset(ax,j);
    697       if (fginv)
    698         for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)  pe[k] = pea[ka]/pe[k];
    699       else
    700         for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)  pe[k] /= pea[ka];
     707      if(divzero) {
     708        if (fginv)
     709          for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)
     710            {if(pe[k]==(T)0) pe[k] = (T)0; else pe[k] = pea[ka]/pe[k];}
     711        else
     712          for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)
     713            {if(pea[k]==(T)0) pe[k] = (T)0; else pe[k] /= pea[ka];}
     714      } else {
     715        if (fginv)
     716          for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)  pe[k] = pea[ka]/pe[k];
     717        else
     718          for(k=0, ka=0;  k<gpas;  k+=step, ka+=stepa)  pe[k] /= pea[ka];
     719      }
    701720    }
    702721  }
  • trunk/SophyaLib/TArray/tarray.h

    r976 r1072  
    147147// Multiplication, division element par element les deux tableaux
    148148  virtual TArray<T>&  MulElt(const TArray<T>& a);
    149   virtual TArray<T>&  DivElt(const TArray<T>& a, bool fginv=false);
     149  virtual TArray<T>&  DivElt(const TArray<T>& a, bool fginv=false, bool divzero=false);
    150150// Recopie des valeurs, element par element
    151151  virtual TArray<T>&  CopyElt(const TArray<T>& a);
Note: See TracChangeset for help on using the changeset viewer.