K grade_updown(K a, I r) { I at=a->t, an=a->n; P(0< at, RE) if(-4==at)R symGrade(a,r); if(-3==at)R charGrade(a,r); if(-1==at||-2==at){ K z; if(an<2){z=newK(-1,an);M(z);DO(an,kI(z)[i]=i);R z;} else{ K x=0;uI y,u=(uI)-1,v=0,h=0,k;//MIN,MAX if(-2==at){x=newK(-1,an);M(x);} //trst(); //elapsed("x=newK"); if(-1==at)DO(an,y=kI(a)[i];h|=y;if(y<u)u=y;if(y>v)v=y) else DO(an,kU(x)[i]=(y=FtoI(kF(a)[i]));h|=y;if(y<u)u=y;if(y>v)v=y) //elapsed("fill x"); //O("u:%016llx v:%016llx\n",u,v); if((r&&-1==at)||((u&MSB)!=(v&MSB))){ u=(uI)-1;v=0;h=0; if(-1==at){ x=newK(-1,an);M(x); DO(an,kU(x)[i]=(y=ItoU(kI(a)[i]));h|=y;if(y<u)u=y;if(y>v)v=y)} else DO(an,kU(x)[i]=(y=ItoU(kI(x)[i]));h|=y;if(y<u)u=y;if(y>v)v=y)}
WamWord FC Pl_Fct_Truncate(WamWord x) { FtoI(x, Identity); }
WamWord FC Pl_Fct_Round(WamWord x) { FtoI(x, rint); }
WamWord FC Pl_Fct_Floor(WamWord x) { FtoI(x, floor); }
WamWord FC Pl_Fct_Ceiling(WamWord x) { FtoI(x, ceil); }