package edu.rice.linpack.LNumber; import edu.rice.linpack.util.*; public class LCDouble extends LComplex { private double data; private double imag; public LCDouble() { data = 0; imag = 0; } public LCDouble(LCDouble S) { data = S.data; imag = S.imag; } public LCDouble(double d,double c) { data = d; imag = c; } public static LNumber[] makeArray(double[] f, double[] c) { int l = f.length; LNumber[] N = new LNumber[l]; for(int i=0;i 0) { int q = N[0].length; for(int i=0;i ((LCDouble)N).data); } public boolean greaterThan(int d) { return (data > d); } public boolean lessThan(LNumber N) { return (data < ((LCDouble)N).data); } public boolean lessThan(int d) { return (data < d); } public boolean greaterOrEqual(LNumber N) { if(data > ((LCDouble)N).data) return true; else if(this.equals((LCDouble)N)) return true; return false; } public boolean greaterOrEqual(int d) { if (data > d) return true; else if (data == d && imag == 0) return true; return false; } public boolean lessOrEqual(LNumber N) { if(data < ((LCDouble)N).data) return true; else if(this.equals((LCDouble)N)) return true; return false; } public boolean lessOrEqual(int d) { if (data < d) return true; else if (data == d && imag == 0) return true; return false; } public LNumber sqrt() { double a = Math.sqrt(.5*((data)+Math.sqrt(data*data+imag*imag))); return new LCDouble(a,imag/(2*a)); } public LNumber square() { return this.mult(this); } public LNumber inv() { double div = (data*data)+(imag*imag); return new LCDouble(data/div,-imag/div); } public LNumber invTo() { double div = (data*data)+(imag*imag); data = data/div; imag = -imag/div; return this; } public void ssq(LNumber SQ, LNumber Scale) { if(data != 0) { LCDouble temp = new LCDouble(Math.abs(data),0); if(Scale.lessThan(temp)) { SQ.set(SQ.mult(((Scale.div(temp)).square())).pplus()); Scale.set(temp); } else SQ.addTo((temp.div(Scale)).square()); } if(imag != 0) { LCDouble temp = new LCDouble(Math.abs(imag),0); if(Scale.lessThan(temp)) { SQ.set(SQ.mult(((Scale.div(temp)).square())).pplus()); Scale.set(temp); } else SQ.addTo((temp.div(Scale)).square()); } } public LNumber realPt() { return new LCDouble(data,0); } public LNumber conj() { return new LCDouble(data,-imag); } }