init({
range: [ [ -1, 11 ], [ -1, 3 ] ],
scale: [20, 40]
});
var digitsA = KhanUtil.digits( A );
//Pad zeroes if need be for the decimal point
while ( digitsA.length < A_DECIMAL + 1) {
digitsA.push( 0 );
}
var digitsB = digitsA.slice();
//For the leading zero 0.# only occurs with division
if ( digitsA.length < B_DECIMAL + 1) {
digitsA.push( ' ' );
digitsB.push( 0 );
}
drawDigits( digitsA.reverse(), 0, 1);
drawDigits( digitsB.reverse(), 0, 0);
for ( var i = 0; i < POW_DIFF; i++) {
if ( PM === 1 ) {
arc( [ digitsA.length - A_DECIMAL + i, 1.5 ], 0.5, 0, 180, { stroke: "blue" } );
label( [ digitsA.length - A_DECIMAL + i, 2 ], i+1, "above" );
if ( i === POW_DIFF - 1 ) {
//hack for the final arrow...is there a better way?
line( [ digitsA.length - A_DECIMAL + i + 0.5, 1.5 ], [ digitsA.length - A_DECIMAL + i + 0.5, 1.46 ], { stroke: "blue", arrows: "->" } );
}
}
else {
//to draw the final arrow
if ( i === POW_DIFF - 1 ) {
style({ arrows: "->" });
}
arc( [ digitsA.length - A_DECIMAL - (i + 1), 1.5 ], 0.5, 0, 180, { stroke: "blue" } );
label( [ digitsA.length - A_DECIMAL - (i + 1), 2 ], i+1, "above" );
}
}
//draw a black ellipse to be used as a decimal point
style({ fill: "#000" });
ellipse( [ digitsA.length - A_DECIMAL - 0.5, 0.8 ], [ 0.09, 0.06 ] );
ellipse( [ digitsB.length - B_DECIMAL - 0.5, -0.2 ], [ 0.09, 0.06 ] );
var labelstr = "The decimal point needs to be moved " + POW_DIFF + " time" + ( POW_DIFF !== 1 ? "s." : ".");
label ([ digitsA.length + 0.5, 0.5 ], labelstr, "right", false);
Moving the decimal one position to the PM === 1 ? "right" : "left" is the same as PM === 1 ? "multiplying" : "dividing" by ten once.
Thus, moving the decimal right POW_DIFF times is the same as multiplying by ten POW_DIFF times, or multiplying by pow( 10, POW_DIFF ):
{A_FLOAT.toFixed( A_DECIMAL )} * {pow( 10, POW_DIFF )} = {B_FLOAT.toFixed( B_DECIMAL )}
Thus, moving the decimal left POW_DIFF times is the same as dividing by ten POW_DIFF times, or dividing by pow( 10, POW_DIFF ):
{A_FLOAT.toFixed( A_DECIMAL )} \div {pow( 10, POW_DIFF )} = {B_FLOAT.toFixed( B_DECIMAL )}
You need to OPERATOR by ten POW_DIFF times.