package Current.basic; import Current.*; import java.applet.Applet; import java.awt.event.*; import java.awt.*; public class DyadicRational { public int n; //numerator public int d; //denominator is 2^d public DyadicRational(int n,int d) { this.n=n; this.d=d; } public DyadicRational() {} /*this routine reduces a dyadic to the lowest common denominator*/ public static DyadicRational simplifyPos(DyadicRational d) { DyadicRational e=new DyadicRational(Math.abs(d.n),d.d); if(e.n==0) return(e); while((e.d>0)&&(e.n%2==0)) { e.n=e.n/2; --e.d; } return(e); } public static DyadicRational simplify(DyadicRational d) { if(d.n>=0) return(simplifyPos(d)); DyadicRational e=simplifyPos(d); e.n=-e.n; return(e); } public static double toDouble(DyadicRational D) { return(1.0*D.n*Math.pow(0.5,D.d)); } public static Complex flipConvert(DyadicRational X,DyadicRational Y) { double x=X.toDouble(X); double y=Y.toDouble(Y); Complex Z=new Complex(x,y); return(Z); } public static int compare(DyadicRational D,double x) { double d=D.toDouble(D); if(d<=x) return(-1); if(d>x) return(1); return(0); } public static DyadicRational augment(DyadicRational D,int i) { DyadicRational E=new DyadicRational(D.n,D.d); while(E.dx) E.n=x; return(E); } public static DyadicRational approximate(double x,int q) { double nn=x*Math.pow(2.0,q); DyadicRational E=new DyadicRational(0,0); E.n=(int)(nn); E.d=q; E=simplify(E); return(E); } public static int content(double x) { int q=0; if(x<.00000000001) return(-1); double test=1; while(test>x) { ++q; test=Math.pow(0.5,q); } return(q); } public void print() { System.out.println("Dyadic: "+this.n+" "+this.d); } }