I am using

Math.floor(Math.random() * high) + low;
to generate a random number. I thought this will generate a random value between the high value and low value. But when I use it in the below program the number generated is sometimes greater than the high value. Can someone please tell me why?

<title>The Number Guessing Game</title>
//The Number Guessing Game
//The computer will the guess the number that the use thinks

var guess = 0;
var reply = "";
var msg = "";
var high = 100;
var low = 1;

msg = "Please think of a number between 1 and 100. \n";
msg += "I will try to guess the number you thought. \n";
msg += "If the number I guess is too high please reply with a 'h'. \n";
msg += "If the number I guess is too low please reply with a 'l'. \n";
msg += "If I guess correctly please reply with a 'c'. \n";

while(reply != 'c'){
guess = Math.floor(Math.random() * high) + low;

alert("low: "+low); //testing statement
alert("high: "+high); //testing statement
//alert("guess: "+guess); //testing statement

msg = "My guess is: "+guess+". \n";
msg += "Please reply with h=high/l=low/c=correct. \n";
reply = prompt(msg,"");

if(reply == 'h'){
high = guess;
} //too high condition
if(reply == 'l'){
low = guess;
} //too low condition
if(reply == 'c'){
alert("Hooray!!! I am the greatest guesser.");
} //correct guess condition
} //end while loop
<h2>The Number Guessing Game</h2>
<h3>Please refresh the page to play the game again.</h3>