function getRandom(a, b){
var r = window.crypto.getRandomValues(new Uint32Array(1))/0xffffffff;
var x = a+(b-a)*r;
return x
}
Вот вам без Math.random().
Но если не использовать никаких API, а лишь чистый javascript - то и получить соответственно можно лишь псевдослучайные числа. А псвевдослучайные и случайные - две большие разницы.
Алгоритмов же для псевдослучайных чисел навалом, гуглите да копипастите. При всех алгоритмических хитростях принцип и результат един.