Для целых чисел могу предложить такой вариант еще:
function severalRandom(min, max, num) {
var i, arr = [], res = [];
for (i = min; i <= max; i++ ) arr.push(i);
for (i = 0; i < num; i++) res.push(arr.splice(Math.floor(Math.random() * (arr.length)), 1)[0])
return res;
}
alert(severalRandom(4, 40, 5))
Хотя и для нецелых тоже - главное задать шаг в третьей строке