[BACK]Return to r-fd.rr CVS log [TXT][DIR] Up to [local] / OpenXM / src / asir-port / cgi

File: [local] / OpenXM / src / asir-port / cgi / r-fd.rr (download)

Revision 1.3, Thu Jul 31 07:00:41 2014 UTC (9 years, 11 months ago) by takayama
Branch: MAIN
Changes since 1.2: +15 -1 lines

r_d2rat(Y) translates Y into an approximate rational number.

/* $OpenXM: OpenXM/src/asir-port/cgi/r-fd.rr,v 1.3 2014/07/31 07:00:41 takayama Exp $ */
load("tk_fd.rr")$
import("tk_r.rr")$
import("oh_number.rr")$

/* r_d2rat(0.3)  --> precision loss in truncation if not ctrl("bigfloat",1) */
ctrl("bigfloat",1)$
def r_d2rat(Y) {
  if ((type(Y) ==4)||(type(Y)==5)||(type(Y)==6)) return map(r_d2rat,Y);
  if ((type(Y)  == 1) && (ntype(Y) >= 1)) {
    S = rtostr(Y);  Y = "eval(("+S+")*exp(0));";
    /* print(Y); */
    Y = eval_str(Y);
    return oh_number.rats(Y);
  }else return Y;
}
def r_ahvec(A,B,C,Y) { 
  Y = r_d2rat(Y);
  R=tk_fd.ygahvec(A,B,C,Y|all=1);
  Gamma=R[1];
  Der=R[0];
  Z=R[2]*Gamma;
  Der2 = newvect(length(Der));
  for (I=0; I<length(Der); I++) Der2[I] = Der[I]*Gamma;
  Der2 = vtol(Der2);
  Ans=cons(Z,Der2);
  /*  Fans=map(rtostr,map(tk_fd.tk_number_rattofloat,Ans)); */
  Fans=map(deval,Ans);
  Fans = tk_r.asir2r_c(Fans);
  return Fans;
}
end$