10 Minute Tutorial over Logarithms with a Mix of Javascript


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: Undefined array key "layout" in /home/bateeqjg/public_html/news/wp-content/plugins/wp-about-author/wp-about-author.php on line 94


Summary:
This tutorial will provide a simple overview of logarithms.

What are Logarithms?
Logarithms are used to determine the exponent needed to receive a certain value with a particular base.

Example: Log 100 = 2. Since 10^2 = 100.

Here’s a short video explaining logarithms more in-depth with a practical example.

The most common bases used for logarithms are base 10 and E. With base E logarithms normally referred to as the natural logarithm.
In Javascript, the function Math.log returns the natural logarithm of the argument instead of a base 10 logarithm. This can cause some confusion for those unaware of this fact.

Math.log( 100 ) == 2 // returns false
Math.log( 100 ) // returns 4.605170185988092

So how can one use a different base other than E? Well, it simple. All you have to do is take the log of the value that you want, then divide that by the log of the desired based.
Like so.

Math.log( x ) / Math.log( desiredBase );

Here’s a user defined function that does the same operation.

/**
* @function Math.logx
* @purpose: To provide the logarithm for any base desired. Default base is 10.
* @returns a number.
*/
Math.logx = function(x,base) {
    return (Math.log(x)) / (Math.log(base | 10 ));
}

And now, we can calculate log 10 as 2 instead of another number.

Math.log( 100 ) == 2    // returns false
Math.logx( 100 ) == 2   // returns true

Larry Battle

Larry Battle

I love to program, and discover new tech. Check out my <a href="http://stackoverflow.com/users/527776/larry-battle">stackoverflow</a> and <a href="https://github.com/LarryBattle">github</a> accounts.

More Posts - Website

Follow Me:Add me on XAdd me on LinkedInAdd me on YouTube

Improved Code for Javascript Decimal to Fraction


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: Undefined array key "layout" in /home/bateeqjg/public_html/news/wp-content/plugins/wp-about-author/wp-about-author.php on line 94

This post improves the code at “Code of the Day Javascript Decimal to fraction” by using Euclid’s Algorithm to find the Great Common Factor or GCF, aka GCD. This method provides a speed up of 10x when compared to the original algorithm posted.

Code

/**
*@function gcd (aka Euclid's algorithm)
*@purpose returns the greatest common factor between two numbers;
*/
function gcd(a, b) {
    return (b) ? gcd(b, a % b) : a;
}
/**
*@function dec2Frac
*@purpose returns a decimal as a fraction.
*/
var dec2Frac = function ( num ) {
	var top = num.toString().replace(/\d+[.]/, '');
	var bot = Math.pow(10, top.length);
	if (num > 1) {
		top = +top + Math.floor(num) * bot;
	}
	var x = gcd(top, bot);
	return (top / x) + "/" + (bot / x);
};

Usage

dec2Frac( 1.24325 ) // returns "4973/4000"
dec2Frac( 2.45 ) // returns "49/20"

Speed Test between Version 1 and 2 of dec2Frac()

//@requires Firebug or Chrome Developer Tools
//The following code test the speed difference between the Version 1 and 2 of dec2Frac.
function gcd(a, b) {
    return (b) ? gcd(b, a % b) : a;
}
var dec2FracV2 = function (d) {
	var top = d.toString().replace(/\d+[.]/, '');
	var bot = Math.pow(10, top.length);
	if (d > 1) {
		top = +top + Math.floor(d) * bot;
	}
	var x = gcd(top, bot);
	return (top / x) + "/" + (bot / x);
};
function dec2FracV1(d) {
    var df = 1, top = 1, bot = 1;
    var limit = 1e5; //Increase the limit to get more precision.
 
    while (df != d && limit-- > 0) {
        if (df < d) {
            top += 1;
        }
        else {
            bot += 1;
            top = parseInt(d * bot, 10);
        }
        df = top / bot;
    }
    return top + '/' + bot;
}
var getRandomNum = function (i, decLen) {
	return (Math.random() * (i || 1)).toFixed(decLen);
};
 
var runTest = function ( funcName ) {
	var func = { "V1": dec2FracV1, "V2": dec2FracV2 }[ funcName ];
	var i = 1000;
	while (i--) {
		num = getRandomNum(10, 4);
		var x = func(num);
		if (num != eval(x)) {
			console.warn("ERROR: Function %s, The fraction %s != %s", funcName, num, x);
		}
	}
};
console.time( 'V1' );
runTest( "V1" );
console.timeEnd( 'V1' );
 
console.time( 'V2' );
runTest( "V2" );
console.timeEnd( 'V2' );

Chrome Result:
V1: 11628ms
V2: 185ms

Try the test out yourself
jsbin.com

Larry Battle

Larry Battle

I love to program, and discover new tech. Check out my <a href="http://stackoverflow.com/users/527776/larry-battle">stackoverflow</a> and <a href="https://github.com/LarryBattle">github</a> accounts.

More Posts - Website

Follow Me:Add me on XAdd me on LinkedInAdd me on YouTube

Code of the Day: Javascript Decimal To Fraction


Warning: WP_Syntax::substituteToken(): Argument #1 ($match) must be passed by reference, value given in /home/bateeqjg/public_html/news/wp-content/plugins/wp-syntax/wp-syntax.php on line 380

Warning: Undefined array key "layout" in /home/bateeqjg/public_html/news/wp-content/plugins/wp-about-author/wp-about-author.php on line 94

Source: mivk from StackOverflow.com
Code

/**
@function dec2frac
@returns string
@purpose Convert a decimal to a fraction
*/
function dec2frac(d) {
    var df = 1, top = 1, bot = 1;
    var limit = 1e5; //Increase the limit to get more precision.
 
    while (df != d && limit-- > 0) {
        if (df < d) {
            top += 1;
        }
        else {
            bot += 1;
            top = parseInt(d * bot, 10);
        }
        df = top / bot;
    }
    return top + '/' + bot;
}

Demo
JSBIN link

Example Output
dec2frac ( 0.1) returns “1/10”
dec2frac ( 0.2) returns “1/5”
dec2frac ( 0.5) returns “1/2”
dec2frac ( 0.9999) returns “9999/10000”
dec2frac ( 0.75) returns “3/4”
dec2frac ( 2.718281828459045) returns “135915/50000”, but this evaluates to 2.7183
dec2frac ( 3.141592653589793) returns “157079/50000”, but this evaluates to 3.14158

Larry Battle

Larry Battle

I love to program, and discover new tech. Check out my <a href="http://stackoverflow.com/users/527776/larry-battle">stackoverflow</a> and <a href="https://github.com/LarryBattle">github</a> accounts.

More Posts - Website

Follow Me:Add me on XAdd me on LinkedInAdd me on YouTube

Gallery Lister 0.6 Beta release


Warning: Undefined array key "layout" in /home/bateeqjg/public_html/news/wp-content/plugins/wp-about-author/wp-about-author.php on line 94

Hey Everyone,
Here’s a old script that I made back in 2007 called gallery Lister.
Basically it’s a simple link generator that generates links in numerical order. It’s really useful when viewing images all on one page.
You can check it out here, Gallery Lister Beta.

Summary:
    This is a javascript batch search script. It generates links or images of sequence data. -: Source
Usage:
    (*start number - *end number).jpg
Example:
    http://www.example.com/pics/(01-30).jpg
Result:
    http://www.example.com/pics/01.jpg
    http://www.example.com/pics/02.jpg
    ...
    http://www.example.com/pics/29.jpg
    http://www.example.com/pics/30.jpg
Tip:
    You can search multiple directories at once with the following format
    http://www.asdf.com/data/(234-235)/(34-54).jpg 

Larry Battle

Larry Battle

I love to program, and discover new tech. Check out my <a href="http://stackoverflow.com/users/527776/larry-battle">stackoverflow</a> and <a href="https://github.com/LarryBattle">github</a> accounts.

More Posts - Website

Follow Me:Add me on XAdd me on LinkedInAdd me on YouTube