Esempio n. 1
0
void set_mv_float(float *f) {
#ifdef HAVE_LIBCSF /* csftypes.h was included: */
	SET_MV_REAL4(f);
#else
	memset(f, 0xFF, sizeof(float));
#endif
}
Esempio n. 2
0
/* (LIBRARY_INTERNAL)
 */
void PutMVPrivate_REAL4(
        REAL4   **matrix,    /* map matrix */
	int    r,           /* row number */
	int    c)           /* column number */
{
	SET_MV_REAL4( matrix[r]+c);
}
Esempio n. 3
0
static int BuildEllipse2(REAL8 xmajor_a, REAL8 yminor_b, REAL8 angle)
{
	int i,nrLines,xCeil;
	int lineStart,lineEndIncl;
	REAL8 xIncr,c=cos(angle),s=sin(angle);
	HOR_CUT_LINE *l;
	PRECOND(xmajor_a != 0);
	PRECOND(yminor_b != 0);
	xmajor_a /= Side();
	yminor_b /= Side();

	xCeil = (size_t)ceil(xmajor_a);
	nrLines = (xCeil*2)+1;
	l = (HOR_CUT_LINE *)ChkMalloc(sizeof(HOR_CUT_LINE)*nrLines);
	for(i=0; i < nrLines; i++) {
		/* mark not initialized */
		SET_MV_REAL4(&(l[i].start.f));
	}

	for (xIncr = 0; xIncr < xCeil; xIncr+=1) {
	 REAL8 y = sqrt( fabs(1-(sqr(xIncr)/sqr(xmajor_a)))*sqr(yminor_b));
	 Add2Lines(l,nrLines,xCeil,c,s, xIncr, y);
	 Add2Lines(l,nrLines,xCeil,c,s, xIncr,-y);
	 Add2Lines(l,nrLines,xCeil,c,s,-xIncr, y);
	 Add2Lines(l,nrLines,xCeil,c,s,-xIncr,-y);
	}
	if (0) {
	 REAL8 y;
	 xIncr = xmajor_a;
	 y = sqrt( fabs(1-(sqr(xIncr)/sqr(xmajor_a)))*sqr(yminor_b));
	 Add2Lines(l,nrLines,xCeil,c,s, xIncr, y);
	 Add2Lines(l,nrLines,xCeil,c,s, xIncr,-y);
	 Add2Lines(l,nrLines,xCeil,c,s,-xIncr, y);
	 Add2Lines(l,nrLines,xCeil,c,s,-xIncr,-y);
	}

	for(i=0; i < nrLines; i++) {
		/* mark not initialized */
		if (!IS_MV_REAL4(&(l[i].start.f)))
			break;
	}
	POSTCOND(i < nrLines);
	lineStart = i;
	for(i = nrLines-1; i >=0;i--) {
		/* mark not initialized */
		if (!IS_MV_REAL4(&(l[i].start.f)))
			break;
	}
	POSTCOND(i >= 0);
	lineEndIncl = i;
	
	for (i=lineStart ; i <= lineEndIncl; i++) {
		PRECOND(!IS_MV_REAL4(&(l[i].start.f)));
		l[i].start.i = (int)Rint(l[i].start.f);
		l[i].end.i   = (int)Rint(l[i].end.f);
	}
	return 1;
}
Esempio n. 4
0
void Do_sqrt(
  REAL4 *val,
  size_t n)
{
  size_t i;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    if (val[i] >= (REAL4)0.0)
      val[i] = (REAL4)sqrt(val[i]);
    else
      SET_MV_REAL4(val+i);
  }
}
Esempio n. 5
0
void Do_log10(
  REAL4 *val,
  size_t n)
{
  size_t i;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    if (val[i] > (REAL4)0.0)
      val[i] = (REAL4)log10((REAL4)val[i]);
    else
      SET_MV_REAL4(val+i);
  }
}
Esempio n. 6
0
void Do_cos_d(
  REAL4 *val,
  size_t n)
{
  size_t i;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    if (val[i] != (REAL4)-1)
      val[i] = (REAL4)cos((REAL4)val[i]);
    else
      SET_MV_REAL4(val+i);
  }
}
Esempio n. 7
0
void Do_acos(
  REAL4 *val,
  size_t n)
{
  size_t i;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    if (fabs(val[i]) > (REAL4)1.0)
      SET_MV_REAL4(val+i);
    else
      val[i] = (REAL4)acos((REAL4)val[i]);
  }
}
Esempio n. 8
0
static int BuildCircle(REAL8 radius)
{
	int i,nrLines,xFloor;
	REAL8 xIncr,lineStart,lineEndIncl;
	HOR_CUT_LINE *l;
	PRECOND(radius != 0);
	radius /= (Side()*2);

	xFloor = (size_t)floor(radius);
	radius *= radius;
	nrLines = (xFloor*2)+1;
	l = (HOR_CUT_LINE *)ChkMalloc(sizeof(HOR_CUT_LINE)*nrLines);
	for(i=0; i < nrLines; i++) {
		/* mark not initialized */
		SET_MV_REAL4(&(l[i].start.f));
	}

	for (xIncr = 0; xIncr <= xFloor; xIncr+=1) {
	 REAL8 y = floor(sqrt(radius-sqr(xIncr))); 
	 Add2Lines(l,nrLines,xFloor,1,0, xIncr, y);
	 Add2Lines(l,nrLines,xFloor,1,0, xIncr,-y);
	 Add2Lines(l,nrLines,xFloor,1,0,-xIncr, y);
	 Add2Lines(l,nrLines,xFloor,1,0,-xIncr,-y);
	}
	for(i=0; i < nrLines; i++) {
		/* mark not initialized */
		if (!IS_MV_REAL4(&(l[i].start.f)))
			break;
	}
	POSTCOND(i < nrLines);
	lineStart = i;
	for(i = nrLines-1; i >=0;i--) {
		/* mark not initialized */
		if (!IS_MV_REAL4(&(l[i].start.f)))
			break;
	}
	POSTCOND(i >= 0);
	lineEndIncl = i;
	
	for (i=(int)lineStart ; i <= (int)lineEndIncl; i++) {
		PRECOND(!IS_MV_REAL4(&(l[i].start.f)));
		l[i].start.i = (int)Rint(l[i].start.f);
		l[i].end.i   = (int)Rint(l[i].end.f);
	}
	return 1;
}
Esempio n. 9
0
void Do_tan_d(
  REAL4 *val,
  size_t n)
{
  size_t i;
  REAL4 tan_mv1 = (REAL4)(M_PI*0.5);
  REAL4 tan_mv2 = (REAL4)(M_PI*1.5);

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    if ( (val[i] == -1) ||  tan_mv1 == val[i]
           || tan_mv2 == val[i])
      SET_MV_REAL4(val+i);
    else
      val[i] = (REAL4)tan((REAL4)val[i]);
  }
}
Esempio n. 10
0
PCR_DLL_FUNC (const char *) pcr_LinkInExecute(
      const char *xmlNotUsed,
      LinkInTransferArray linkInTransferArray)
{
  float *result =  (float *)linkInTransferArray[0];

  const float *spatial    =(const float *)linkInTransferArray[1];
  const float nonSpatial  =((const float *)linkInTransferArray[2])[0];

  int nrCells=nrRows*nrCols;
  int c;
  for(c=0; c < nrCells; c++) {
    if (IS_MV_REAL4(spatial+c))
      SET_MV_REAL4(result+c);
    else
      result[c]=spatial[c]+nonSpatial;
  }
  /* no error */
  return 0;
}
Esempio n. 11
0
void Do_asin(
  REAL4 *val,
  size_t n)
{
  size_t i;
  double t;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    t = val[i];
    if (fabs(t) > (double)1.0)
      SET_MV_REAL4(val+i);
    else
    {
      t = asin(t);
      val[i] = (REAL4)ScaleRad(t);
    }
  }
}
Esempio n. 12
0
/* up to 34 is ok, 35 => infinite
 */
void Do_fac(
  REAL4 *val,
  size_t n)
{
  size_t i;

  for(i=0; i < n; i++)
  if (! IS_MV_REAL4(val+i))
  {
    float v = floor(val[i]);
    if (v > (REAL4)0.0 && v <= (REAL4)34.0 && v == val[i])
    {
      float r = 1,n = 1;
      while (n <= v)
      {
        r *= n;
        n += 1;
      }
      val[i] = r;
    }
    else
      SET_MV_REAL4(val+i);
  }
}