Created
December 4, 2013 06:57
-
-
Save dhilipsiva/7783438 to your computer and use it in GitHub Desktop.
Binet's Fibonacci
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* fibbonacci.js | |
* Copyright (C) 2013 dhilipsiva <[email protected]> | |
* | |
* Distributed under terms of the MIT license. | |
*/ | |
function isDigit(val) { | |
/* | |
* Find if given value is a digit or not. | |
* If the ceil (or floor) of a given value is | |
* equal to itself, then it is digit, obviously. | |
*/ | |
return val == Math.ceil(val); | |
} | |
function isPerfectSquare(num) { | |
// Test if a number is perfect square or not. | |
var numSqrt = Math.sqrt(num); | |
// If numSqrt is a digit, then num is a perfect square. | |
return isDigit(numSqrt) | |
} | |
function calcBinetNumber(num) { | |
//Calcualte the binet number. | |
return 5 * Math.pow(num, 2); | |
} | |
function calcInverseBinetNumber(num){ | |
return Math.sqrt(num / 5); | |
} | |
function isFibbonacciNumber(num) { | |
// Function to find if a number is a fibbonacci number. | |
var binetNumber = calcBinetNumber(num); | |
if (isPerfectSquare(binetNumber + 4)) | |
return true; | |
if (isPerfectSquare(binetNumber - 4)) | |
return true; | |
/* | |
* If none of the above calculations returned true, | |
* then it is obviously not a fibbonacci number. | |
*/ | |
return false; | |
} | |
// Sorry, I couldnt get nextSmallestFibonacciNumber to working. | |
function nextSmallestFibonacciNumber(num) { | |
// Function to calcualte the next smallest fibonacci number in the series. | |
var binetFactor = Math.sqrt(calcBinetNumber(num)); | |
var binetNumber = Math.pow(Math.ceil(binetFactor), 2); | |
var inverseBinetNumber; | |
inverseBinetNumber = calcInverseBinetNumber(binetNumber + 4); | |
if (isDigit(inverseBinetNumber)) | |
return inverseBinetNumber; | |
inverseBinetNumber = calcInverseBinetNumber(binetNumber - 4); | |
if (isDigit(inverseBinetNumber)) | |
return inverseBinetNumber; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment