public static fInt Sqrt(fInt fi) { if (fi.value == 0) { return(new fInt(0, false)); } fInt prev = new fInt(1); for (int i = 0; i < 20; i++) //could probably go as low as 5 iterations { prev = prev - ((prev * prev - fi) / (2 * prev)); } //Debug.Log("SQRT " + fi + ": " + prev + " vs " + System.Math.Sqrt(fi.value/(double)SCALE)); //Round off at the end return(prev); //---NEWTON'S EQUATION---------- //http://en.wikipedia.org/wiki/Newton%27s_method#Square%5Froot%5Fof%5Fa%5Fnumber //f(x) = x^2 - NUMBER_TO_Sqrt //(derivative) f'(x) = 2x //loop through this multiple times to get more accurate results //prevX - f(prevX)/f'(prevX) }
public static fInt Max(fInt f1, fInt f2) { if (f1 > f2) { return(f1); } else { return(f2); } }
public static fInt Min(fInt f1, fInt f2) { if (f1 < f2) { return(f1); } else { return(f2); } }
public static fInt Round(fInt fi) { fInt fiDecimal = fi.Decimal; if (fiDecimal >= MakeFraction(1, 2)) { return((fi - fiDecimal) + 1); } else { return(fi - fiDecimal); } }
public static fInt Tan(fInt fi) { return Sin(fi)/Cos(fi); }
public static fInt Sqrt(fInt fi) { if(fi.value == 0) return new fInt(0,false); fInt prev = new fInt(1); for(int i = 0; i < 20; i++) //could probably go as low as 5 iterations { prev = prev - ((prev * prev - fi)/(2 * prev)); } //Debug.Log("SQRT " + fi + ": " + prev + " vs " + System.Math.Sqrt(fi.value/(double)SCALE)); //Round off at the end return prev; //---NEWTON'S EQUATION---------- //http://en.wikipedia.org/wiki/Newton%27s_method#Square%5Froot%5Fof%5Fa%5Fnumber //f(x) = x^2 - NUMBER_TO_Sqrt //(derivative) f'(x) = 2x //loop through this multiple times to get more accurate results //prevX - f(prevX)/f'(prevX) }
public static fInt Sin(fInt fi) { return new fInt(SinLookUp((int)fi), false); }
public static fInt Round(fInt fi) { fInt fiDecimal = fi.Decimal; if(fiDecimal >= MakeFraction(1,2)) return (fi - fiDecimal) + 1; else return fi - fiDecimal; }
public static fInt Min(fInt f1, fInt f2) { if(f1 < f2) return f1; else return f2; }
public static fInt Max(fInt f1, fInt f2) { if(f1 > f2) return f1; else return f2; }
public static fInt Cos(fInt fi) { return new fInt(CosLookUp((int)fi), false); }
public static fInt Abs(fInt fi) { return new fInt(((fi.value < 0) ? -fi.value : fi.value), false); }
public static fInt Tan(fInt fi) { return(Sin(fi) / Cos(fi)); }
public static fInt Cos(fInt fi) { return(new fInt(CosLookUp((int)fi), false)); }
public static fInt Sin(fInt fi) { return(new fInt(SinLookUp((int)fi), false)); }
public static fInt Abs(fInt fi) { return(new fInt(((fi.value < 0) ? -fi.value : fi.value), false)); }