Find largest fib less than..

 

I am trying to find the largest fib number less than a given input.  I know that a number is a fib number if (5 * n^2 + 4) or (5 * n^2 - 4) is a square number.  Here is the function I am trying but it doesn't seem to work for me.  Can someone more experienced please take a look?

 Thank you. 

 

double isfib (double fibo)
{
for (double n=fibo-1; n>0; n--) 
{
double exp=MathPow(n,2);
double plus = 5*exp+4;
double minus = 5*exp-4;
double plusrt = MathSqrt(plus);
double minusrt=MathSqrt(minus);
double plusrmdr = MathMod(plus,plusrt);
double minusrmdr = MathMod(minus,minusrt);
if (plusrmdr ==0 || minusrmdr ==0) return n;
else return(0);
}
}

 


 
nycraja:

I am trying to find the largest fib number less than a given input.  I know that a number is a fib number if (5 * n^2 + 4) or (5 * n^2 - 4) is a square number.  Here is the function I am trying but it doesn't seem to work for me.  Can someone more experienced please take a look?

 Thank you. 

 

 


Got it.

double isfib (double fibo)
{
for (double n=fibo-1; n>0; n--) 
{
double expt=MathPow(n,2);
double plus = 5*expt+4;
double minus = 5*expt-4;
double plusrt = MathSqrt(plus);
double minusrt=MathSqrt(minus);
double plusrmdr = MathMod(plus,plusrt);
double minusrmdr = MathMod(minus,minusrt);
if (plusrmdr ==0 || minusrmdr ==0)
break;
}
return(n);
}
 
nycraja: I am trying to find the largest fib number less than a given input.  I know that a number is a fib number if (5 * n^2 + 4) or (5 * n^2 - 4) is a square number.
Why not just create them and stop when you get one too large?
int fib(int n){
   int prev=0, next = 1;
   while(next <= n){ 
      int old = prev; 
      prev = next; 
      next = old + prev; // 1, 2, 3, 5
   }
   return prev;
}
Reason: